Custom Listview Adapter with filter Android

后端 未结 10 702
北荒
北荒 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 06:57

    In your CustomAdapter class implement filterable.

     public class CustomAdapter extends BaseAdapter implements Filterable {
    
        private List itemsModelsl;
        private List itemsModelListFiltered;
        private Context context;
    
        public CustomAdapter(List itemsModelsl, Context context) {
            this.itemsModelsl = itemsModelsl;
            this.itemsModelListFiltered = itemsModelsl;
            this.context = context;
        }
    
    
    
        @Override
        public int getCount() {
            return itemsModelListFiltered.size();
        }
    
        @Override
        public Object getItem(int position) {
            return itemsModelListFiltered.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view = getLayoutInflater().inflate(R.layout.row_items,null);
    
    
            TextView names = view.findViewById(R.id.name);
            TextView emails = view.findViewById(R.id.email);
            ImageView imageView = view.findViewById(R.id.images);
    
            names.setText(itemsModelListFiltered.get(position).getName());
            emails.setText(itemsModelListFiltered.get(position).getEmail());
            imageView.setImageResource(itemsModelListFiltered.get(position).getImages());
    
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e("main activity","item clicked");
                    startActivity(new Intent(MainActivity.this,ItemsPreviewActivity.class).putExtra("items",itemsModelListFiltered.get(position)));
    
                }
            });
    
            return view;
        }
    
    
    
        @Override
        public Filter getFilter() {
            Filter filter = new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
    
                    FilterResults filterResults = new FilterResults();
                    if(constraint == null || constraint.length() == 0){
                        filterResults.count = itemsModelsl.size();
                        filterResults.values = itemsModelsl;
    
                    }else{
                        List resultsModel = new ArrayList<>();
                        String searchStr = constraint.toString().toLowerCase();
    
                        for(ItemsModel itemsModel:itemsModelsl){
                            if(itemsModel.getName().contains(searchStr) || itemsModel.getEmail().contains(searchStr)){
                                resultsModel.add(itemsModel);
    
                            }
                             filterResults.count = resultsModel.size();
                                filterResults.values = resultsModel;
                        }
    
    
                    }
    
                    return filterResults;
                }
    
                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
    
                    itemsModelListFiltered = (List) results.values;
                    notifyDataSetChanged();
    
                }
            };
            return filter;
        }
    }
    

    }

    You can get the whole tutorial here: ListView With Search/Filter and OnItemClickListener

    Github Source Code

提交回复
热议问题