簡體   English   中英

Android展開式清單搜尋檢視

[英]Android Expandable list search view

對子值進行排序。 當我鍵入搜索效果很好,但是當我刪除鍵入的字母時,列表不會更新。

我的模特班

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

問題出在哪里? 我認為我的原始列表在某處進行了修改? 有什么幫助嗎?

在performFiltering方法中進行以下更改:

更換

final ArrayList<Category> processData = originalData;

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

當前,您的processData引用了originalData數組,並且當您修改processData數組時,您的originalData也被更改了。

請添加嘗試此進行一些更改..!

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

希望對您有幫助..!

將下面的代碼替換為“過濾器”中的部分代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM