Custom search through ArrayList for array names

Viewed 419

I'm trying to implement search filter with getFilter method in my custom adapter.

There are two models of search through the list.

  • search for title of an item,
  • search for genre[] of an item.

(But I'm just talking about genre here).

The below code is working fine, but what I need is just a little more customized way to search in genre[].

What I'm trying to achieve is: (What I want):

multi-keyword searching, each category separated with,. example: genre1,genre2

(What I have done):

When I type genre1,genre2 then it gives the items that have this sequence in genres, it won't give genre1,genre3,genre2 , or just genre1.

Can you help, please?

getFilter:

@Override
public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            dataList = (List<ProductLocal>) results.values;
            notifyDataSetChanged();
        }
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            List<ProductLocal> filteredList = new ArrayList<>();
            constraint = constraint.toString().toLowerCase();
            for (int i = 0; i < dataListFilter.size(); i++) {
                ProductLocal dataNames = dataListFilter.get(i);

                String genreStr = "";
                for (String str : dataNames.getGenre()) {
                    genreStr += str + ",";
                }

                if (dataNames.getTitle().toLowerCase().startsWith(constraint.toString()) 
                 || genreStr.toLowerCase().contains(constraint.toString())) {
                    filteredList.add(dataNames);
                }
            }
            results.count = filteredList.size();
            results.values = filteredList;
            return results;
        }

    };
    return filter;
}
3 Answers
Related