How to implement search in CustomListView based on class item of POJO class in Android?

You want your adapter to implement Filterable. Then override getFilter to perform the search

@Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if (results != null && results.count >= 0) {
                setData(results.values);
            } else {
                setData(mPostingData);
            }

            notifyDataSetInvalidated();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults result = new FilterResults();
            if (!TextUtils.isEmpty(constraint)) {
                constraint = constraint.toString().toLowerCase();
                ArrayList<PostData> currentItems = new ArrayList<PostData>();
                ArrayList<PostData> foundItems = new ArrayList<PostData>();

                currentItems.addAll(mPostingData);

                for (PostData post: currentItems){
                    // Search for the items here. If we get a match, add to the list
                    if (post.mType.toLowerCase().contains(constraint)) {
                        foundItems.add(m);
                    } else if .... {
                    }
                }

                result.count = foundItems.size();
                result.values = foundItems;
            } else {
                result.count = -1;
            }

            return result;
        }
    };
}

You would then call the search from the activity with adapter.getFilter().filter(“Search Query”).

This will replace the list of items in your listview with the search results too.

Leave a Comment