Custom expandable list view with child search filter

前端 未结 1 1319
春和景丽
春和景丽 2020-12-10 23:52

I\'ve already implemented a list view with search filter but right now, I have to changed it to expandable list view with child search filter. There would be an edit text as

相关标签:
1条回答
  • 2020-12-11 00:14
    edit = (EditText)findViewById(R.id.editText1);
    edit.addTextChangedListener(filterTextWatcher);
    

    private TextWatcher filterTextWatcher = new TextWatcher() {
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {  
    
        } 
    
        public void onTextChanged(CharSequence s, int start, int before, int count) {  
    
        }
    
        public void afterTextChanged(Editable s) {
            ((Filterable) ((ListAdapter) Adapter)).getFilter().filter(edit.getText().toString());
        }  
    };
    

    public class ListAdapter extends BaseExpandableListAdapter  implements Filterable {
        public void notifyDataSetInvalidated() {
            super.notifyDataSetInvalidated();
        }
    
        public Filter getFilter() {
            if (filter == null)
                filter = new MangaNameFilter();
                return filter;
            }
    

    private class MangaNameFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            // NOTE: this function is *always* called from a background thread, and
            // not the UI thread.
            constraint = edit.getText().toString().toLowerCase();
            FilterResults result = new FilterResults();
            if(constraint != null && constraint.toString().length() > 0) {
                detailsList = detailsSer.GetAlldetails();
                dupCatList = detailsList;
    
                ArrayList<detailsEntity> filt = new ArrayList<detailsEntity>();
                ArrayList<detailsEntity> lItems = new ArrayList<detailsEntity>();
                synchronized(this) {
                    lItems.addAll(dupCatList);
                }
    
                for(int i = 0, l = lItems.size(); i < l; i++) {
                    detailsEntity m = lItems.get(i);
    
                    if (m.description.toLowerCase().contains(constraint))
                        filt.add(m);
                    }
    
                    result.count = filt.size();
                    result.values = filt;
                } else {
                    detailsList = detailsSer.GetAlldetails();
                    dupCatList = detailsList;
                    synchronized(this) {
                        result.count = dupCatList.size();
                        result.values = dupCatList;
                    }
                }
                return result;
            }
    
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults result) {
                // NOTE: this function is *always* called from the UI thread.
    
                filtered = (ArrayList<detailsEntity>)result.values;
    
                ArrayList<Integer> IdList = new ArrayList<Integer>();
                IdList.clear();
                for(int i = 0; i < filtered.size(); i++) {
                    IdList.add(filtered.get(i).catID);
                }
    
                HashSet<Integer> hashSet = new HashSet<Integer>(IdList);
                midList = new ArrayList<Integer>(hashSet) ;
                Collections.sort(midList);
                Adapter = new CategoryListAdapter(context, R.layout.list1, R.layout.list2, filtered, midList);
                List.setAdapter(Adapter);
            }
        }                   
    }
    
    0 讨论(0)
提交回复
热议问题