Custom Listview Adapter with filter Android

后端 未结 10 818
北荒
北荒 2020-11-22 06:07

Please am trying to implement a filter on my listview. But whenever the text change, the list disappears.Please Help Here are my codes. The adapter class.

p         


        
10条回答
  •  无人共我
    2020-11-22 07:01

    you can find custom list adapter class with filterable using text change in edit text...

    create custom list adapter class with implementation of Filterable:

    private class CustomListAdapter extends BaseAdapter implements Filterable{
    
        private LayoutInflater inflater;
        private ViewHolder holder;
        private ItemFilter mFilter = new ItemFilter();
    
        public CustomListAdapter(List newlist) {
            filteredData = newlist;
        }
    
        @Override
        public int getCount() {
            return filteredData.size();
        }
    
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            holder = new ViewHolder();
    
            if(inflater==null)
                inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            if(convertView == null){
                convertView = inflater.inflate(R.layout.row_listview_item, null);
    
                holder.mTextView = (TextView)convertView.findViewById(R.id.row_listview_member_tv);
    
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder)convertView.getTag();
            }
    
            holder.mTextView.setText(""+filteredData.get(position).getYourdata());
    
            return convertView;
        }
    
        @Override
        public Filter getFilter() {
            return mFilter;
        }
    
    
    }
    
    class ViewHolder{
        TextView mTextView;
    }
    
    private class ItemFilter extends Filter {
        @SuppressLint("DefaultLocale")
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
    
            String filterString = constraint.toString().toLowerCase();
    
            FilterResults results = new FilterResults();
    
            final List list = YourObject.getYourDataList();
    
            int count = list.size();
            final ArrayList nlist = new ArrayList(count);
    
            String filterableString ;
    
            for (int i = 0; i < count; i++) {
                filterableString = ""+list.get(i).getYourText();
                if (filterableString.toLowerCase().contains(filterString)) {
                    YourCustomData mYourCustomData = list.get(i);
                    nlist.add(mYourCustomData);
                }
            }
    
            results.values = nlist;
            results.count = nlist.size();
    
            return results;
        }
    
        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            filteredData = (ArrayList) results.values;
            mCustomListAdapter.notifyDataSetChanged();
        }
    
    }
    
    mEditTextSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(mCustomListAdapter!=null)
                    mCustomListAdapter.getFilter().filter(s.toString());
    
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    

提交回复
热议问题