0

子の値をソートする。 検索を入力しても問題ありませんが、入力した文字を削除するとリストは更新されません。Android Expandableリスト検索ビュー

私のモデルクラス

public class Category { 

    public class SubCategory 
    { 
     public String name; 

     public SubCategory(String name) 
     { 
      this.name = name; 

     } 
    } 

    public String name; 

    public ArrayList<SubCategory> categories; 

    public Category(String name, ArrayList<SubCategory> categories) 
    { 
     this.name = name; 
     this.categories = categories; 
    } 

} 

アダプタ

問題でした
private ArrayList<Category> data; 
    private ArrayList<Category> originalData; 


    public CategoryListAdapter(Context context, ArrayList<Category> data) 
    { 
     this.context = context; 
     this.data = data; 
     this.originalData = new ArrayList<>(); 
     this.originalData.addAll(data);  } 


    public Filter getFilter() { 
     MyFilter filter = new MyFilter(); 
     return filter; 
    } 


    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults results = new FilterResults(); 

      String filterString = constraint.toString().toLowerCase(); 
      Log.i("Tag" , filterString); 
      final ArrayList<Category> processData = originalData; 

      if(filterString.isEmpty()){ 

       results.values = processData; 
       results.count = processData.size(); 
       Log.i("Tag" , "original"+ originalData.get(0).categories.size()); 

      }else { 
       int count = processData.size(); 
       ArrayList<Category> nlist = new ArrayList<>(); 

       for (int i = 0; i < count; i++) { 
        Category cat = processData.get(i); 
        final ArrayList<RequestCategory> req_catgories = processData.get(i).categories; 
        final ArrayList<RequestCategory> new_list = new ArrayList<>(); 

        for (RequestCategory req_catgory : req_catgories) { 
         if (req_catgory.display_name.toLowerCase().contains(filterString)) { 
          new_list.add(req_catgory); 
          Log.i("Sub category", "added"); 
         } 
        } 
        cat.categories = new_list; 
        nlist.add(cat); 
       } 

       results.values = nlist; 
       results.count = nlist.size(); 
      } 
      Log.i("VALUES", results.values.toString()); 
      return results; 
     } 

のスニペット?私のオリジナルのリストはどこかで変更されていると思いますか? 助けてください?

+0

フィルタリングのためにテキストをアダプタに渡しているときに、そこに条件を適用しましたか?空の場合はテキストを渡していない可能性があります –

+0

このリンクを参照してくださいhttp://www.androidbegin.com/tutorial/android-search-listview-using-filter/、refrenceを作成しているときに元のリストが変更されています – Meenal

答えて

0

いくつかの変更を加えてみてください。

private ArrayList<Category> data; 
     private ArrayList<Category> searchData; 
     private ArrayList<Category> originalData; 


     public CategoryListAdapter(Context context, ArrayList<Category> data) { 
      this.context = context; 
      this.data = data; 
      this.searchData = data; 
      this.originalData = data; 
     } 


     public Filter getFilter() { 
      MyFilter filter = new MyFilter(); 
      return filter; 
     } 


     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults results = new FilterResults(); 

      String filterString = constraint.toString().toLowerCase(); 
      Log.i("Tag", filterString); 
      final ArrayList<Category> processData = searchData; 

      if (filterString.isEmpty()) { 

       results.values = processData; 
       results.count = processData.size(); 
       Log.i("Tag", "original" + originalData.get(0).categories.size()); 

      } else { 
       int count = processData.size(); 
       ArrayList<Category> nlist = new ArrayList<>(); 

       for (int i = 0; i < count; i++) { 
        Category cat = processData.get(i); 
        final ArrayList<RequestCategory> req_catgories = processData.get(i).categories; 
        final ArrayList<RequestCategory> new_list = new ArrayList<>(); 

        for (RequestCategory req_catgory : req_catgories) { 
         if (req_catgory.display_name.toLowerCase().contains(filterString)) { 
          new_list.add(req_catgory); 
          Log.i("Sub category", "added"); 
         } 
        } 
        cat.categories = new_list; 
        nlist.add(cat); 
       } 

       results.values = nlist; 
       results.count = nlist.size(); 
      } 
      Log.i("VALUES", results.values.toString()); 
      return results; 
     } 

私はあなたに役立つことを願っています..!あなたのperformFiltering方法で

+0

originalDataは使用していませんか? –

1

メイク、次の変更:

現在お使いのPROCESSDATAがoriginalDataアレイに参照しているとあなたがPROCESSDATA配列を変更したときに、あなたのoriginalDataがある

final ArrayList<Category> processData = new ArrayList<>(); 
processData.addAll(originalData); 

final ArrayList<Category> processData = originalData; 

を置き換えます変更されました。

+0

フィルタリングのためにテキストをアダプタに渡すときにエラー –

+0

が表示されますが、そこに条件を適用しましたか?空の場合はテキストを渡していない可能性があります –

+0

NO。 adapter.getFilter()。filter(newText); テキストが入力されていなければ、まだ空の状態になります。メインカテゴリ内のサブカテゴリリストは変更されます。 –

0

以下のコードをフィルタのコード部分に置き換えてください。

if(filterString==null||filterString.equals("")||filterString.length()==0){ 
     new_list.addAll(req_catgories); 
}else{ 
    for (RequestCategory req_catgory : req_catgories) { 
    if (req_catgory.display_name.toLowerCase().contains(filterString)) { 
     new_list.add(req_catgory); 
     Log.i("Sub category", "added"); 
    } 
}} 
関連する問題