【问题标题】:Android Expandable list search viewAndroid 可扩展列表搜索视图
【发布时间】:2017-07-12 06:45:50
【问题描述】:

按子值排序。 当我输入搜索工作正常但是当我删除输入的字母时列表没有更新。

我的模型课

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

}

适配器的sn-p

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

问题出在哪里?我认为我的原始列表在某处被修改? 有什么帮助吗?

【问题讨论】:

标签: android expandablelistview expandablelistadapter android-filter


【解决方案1】:

在您的 performFiltering 方法中进行以下更改:

替换

final ArrayList<Category> processData = originalData;

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

当前您的 processData 正在引用 originalData 数组,当您修改 processData 数组时,您的 originalData 也会更改。

【讨论】:

  • 当您将文本传递给适配器进行过滤时,您是否在那里应用了任何条件?如果它是空的,可能是它没有传递文本
  • 没有。适配器.getFilter().filter(newText);如果没有文字输入,我仍然会进入空白状态。但是主类里面的子类列表被修改了。
【解决方案2】:

请添加试试这个以进行一些更改..!

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

希望对你有帮助..!

【讨论】:

    【解决方案3】:

    将下面的代码替换为您在过滤器中的部分代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多