2016-06-23 12 views
0

こんにちは、があり、入力するとListviewfilteredになり、リストに含まれている場合にのみ値が表示されます。リストビューのAndroid Filter arrayAdapterが機能しない

+0

エラー/デバッグログはありますか? –

+0

実際、あなたのperformFilteringではフィルタを実行しません。リストのすべてのエントリを新しいものに追加するだけです。あなたは次のようなものを見逃していませんでしたか? 'if(item.getNom.equals(constraint)){tempList.add(item); } '? –

+0

私はすでにフィルタリングの結果であなたのリストのすべてのエントリを追加していると言いましたので、もちろんリストはフィルタリングされません。 –

答えて

0

変更するには、以下のコードで、あなたのアダプタ:

public class CustomListviewAdapter extends ArrayAdapter<Personne> implements Filterable { 

     private LayoutInflater inflater; 
     private ArrayList<Personne> data; 
     private ArrayList<Personne> filteredData = null; 
     private Activity mContext; 
     private int layoutResourceId; 

     public CustomListviewAdapter(Activity context, int resource, ArrayList<Personne> objects) { 

      super(context, resource, objects); 
      data = objects; 
      filteredData = objects; 
      mContext = context; 
      layoutResourceId = resource; 

     } 

     @Override 
     public int getCount() { 
      return filteredData.size(); 
     } 

     @Override 
     public Personne getItem(int position) { 
      return super.getItem(position); 
     } 

     @Override 
     public int getPosition(Personne item) { 
      return super.getPosition(item); 
     } 

     @Override 
     public long getItemId(int position) { 
      return super.getItemId(position); 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 

      View row = convertView; 
      ViewHolder viewHolder = null; 

      if (row == null) { 

       inflater = LayoutInflater.from(mContext); 
       row = inflater.inflate(layoutResourceId, parent, false); 

       viewHolder = new ViewHolder(); 

       viewHolder.imageView = (ImageView) row.findViewById(R.id.icon); 
       viewHolder.nom = (TextView) row.findViewById(R.id.nameLabel); 
       viewHolder.pseudo = (TextView) row.findViewById(R.id.usernameLabel); 
       viewHolder.email = (TextView) row.findViewById(R.id.emailLabel); 

       row.setTag(viewHolder); 

      } 
      else { 

       viewHolder = (ViewHolder) row.getTag(); 

      } 

      viewHolder.personne = filteredData.get(position); 

      viewHolder.nom.setText("Nom: " + viewHolder.personne.getNom()); 
      viewHolder.pseudo.setText("Pseudo: " + viewHolder.personne.getUsername()); 
      viewHolder.email.setText("Email: " +   viewHolder.personne.getEmail()); 

      return row; 

     } 




Filter filter = new Filter() { 
    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     String filterString = constraint.toString().toLowerCase(); 
     FilterResults results = new FilterResults(); 
     final List<String> tempList = data ; 
     int count = tempList.size(); 
     final ArrayList<String> nlist = new ArrayList<String>(count); 
     String filterableString ; 
     for (int i = 0; i < count; i++) { 
      filterableString = tempList.get(i).getUserName(); 
      if (filterableString.toLowerCase().contains(filterString)) { 
       nlist.add(filterableString); 
      } 
     } 
     results.values = nlist; 
     results.count = nlist.size(); 
     return results; 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     filteredData = (ArrayList<String>) results.values; 
     notifyDataSetChanged(); 
     } 
} 



     public class ViewHolder { 

      private Personne personne; 
      private TextView nom; 
      private TextView pseudo; 
      private TextView email; 

     } 
    } 
0

変更し、あなたにアダプターコードコード以下:基本的に

public class CustomListviewAdapter extends ArrayAdapter<Personne> { 

private LayoutInflater inflater; 
private ArrayList<Personne> data; 
private ArrayList<Personne> tempList; 
private Activity mContext; 
private int layoutResourceId; 

public CustomListviewAdapter(Activity context, int resource, ArrayList<Personne> objects) { 
    data = objects; 
    tempList = new ArrayList<>(); 
    tempList.addAll(data); 
    mContext = context; 
    layoutResourceId = resource; 
    super(context, resource, tempList);   
} 

@Override 
public int getCount() { 
    return tempList.size(); 
} 

@Override 
public Personne getItem(int position) { 
    return super.getItem(position); 
} 

@Override 
public int getPosition(Personne item) { 
    return super.getPosition(item); 
} 

@Override 
public long getItemId(int position) { 
    return super.getItemId(position); 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ViewHolder viewHolder = null; 

    if (row == null) { 

     inflater = LayoutInflater.from(mContext); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     viewHolder = new ViewHolder(); 

     viewHolder.imageView = (ImageView) row.findViewById(R.id.icon); 
     viewHolder.nom = (TextView) row.findViewById(R.id.nameLabel); 
     viewHolder.pseudo = (TextView) row.findViewById(R.id.usernameLabel); 
     viewHolder.email = (TextView) row.findViewById(R.id.emailLabel); 

     row.setTag(viewHolder); 

    } 
    else { 

     viewHolder = (ViewHolder) row.getTag(); 

    } 

    viewHolder.personne = tempList.get(position); 

    viewHolder.nom.setText("Nom: " + viewHolder.personne.getNom()); 
    viewHolder.pseudo.setText("Pseudo: " + viewHolder.personne.getUsername()); 
    viewHolder.email.setText("Email: " + viewHolder.personne.getEmail()); 
    return row; 

} 

public void filter(String text) { 
    if(text != null && data!=null) { 
     int length=data.size(); 
     int i=0; 
     tempList.clear(); 
     if(text.isEmpty()){ 
      tempList.addAll(data); 
     } else{ 
      while(i<length){ 
       Personne item=data.get(i); 
       String username = item.getUsername(); 
       if (username.toLowerCase().startsWith(text.toLowerCase())) { 
        tempList.add(item); 
       } 
       i++; 
      } 
     } 
     notifyDataSetChanged(); 
    } 
} 

public class ViewHolder { 

    private Personne personne; 
    private TextView nom; 
    private TextView pseudo; 
    private TextView email; 

} 

} 

私はデータとなります一時リストの主なリストを維持しようとしていますメインリストから取得したデータをフィルタリングするために使用されます。上記のコードはusernameに基づいてフィルタリングされていますが、他のパラメータを追加して追加する場合はifの条件をwhileループ内に追加/編集できます。

+0

私の更新された答えを確認してください、私はコンストラクタを更新しました、私はこのアップデートで修正する必要があるバグについては正しいです。 – himanshu1496

+0

検索結果に何も表示されていない、または間違った結果が表示されていますか? – himanshu1496

+0

はい、何かを表示しますが、入力したものではありませんが、この新しい実装の前に、アプリケーションを起動するとすべてのアイテムリストが表示されます – stack

関連する問題