0

对子值进行排序。 当我键入搜索工作正常,但当我删除键入的信件列表不更新。Android扩展列表搜索视图

我的模型类

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/,你的原始列表越来越修改,因为你正在创建参考 – 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; 
     } 

我希望这对你有帮助..!

+0

没有使用originalData? –

1

制作按照您的performFiltering方法改变:

更换

final ArrayList<Category> processData = originalData; 

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

目前你的过程数据被引用到originalData阵列,当你修改过程数据数组,那么你的originalData是也改变了。

+0

当您将文本传递给适配器进行过滤时,我仍然收到错误 –

+0

,您是否在那里应用了任何条件?可能是它没有通过文本,如果它是空的 –

+0

没有。 。adapter.getFilter()过滤器(newText); 如果没有文字输入,我仍会进入空白状态。但主类别内的子类别列表已修改。 –

0

将下面的代码替换为Filter中代码的一部分。

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"); 
    } 
}}