Filter items inside RecyclerView with a SearchView
suggest changeadd filter
method in RecyclerView.Adapter
:
public void filter(String text) { if(text.isEmpty()){ items.clear(); items.addAll(itemsCopy); } else{ ArrayList<PhoneBookItem> result = new ArrayList<>(); text = text.toLowerCase(); for(PhoneBookItem item: itemsCopy){ //match by name or phone if(item.name.toLowerCase().contains(text) || item.phone.toLowerCase().contains(text)){ result.add(item); } } items.clear(); items.addAll(result); } notifyDataSetChanged(); }
itemsCopy
is initialized in adapter’s constructor like itemsCopy.addAll(items)
.
If you do so, just call filter
from OnQueryTextListener
from SearchView
:
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { adapter.filter(query); return true; } @Override public boolean onQueryTextChange(String newText) { adapter.filter(newText); return true; } });
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents