Итак, попытка отфильтровать RecyclerView с помощью searchview, что вроде работает, однако небольшая ошибка, которую я обнаружил, заключается в том, что результат просто заполняет информацию из первого элемента в RecyclerView, однако при нажатии или обновлении экрана sh показывает правильная информация, которую искали, я предполагаю, что это как-то связано с androidx, поскольку учебник, которому я следил, был до androidx.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
MenuItem searchItem = menu.findItem(R.id.search);
adapter = new adapter(mainDishes.this, recipes);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
return true;
}
@Override
public Filter getFilter() {
return exampleFilter;
}
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Recipes> Filtered = new ArrayList<>();
if (constraint == null || constraint.length()== 0){
Filtered.addAll(mRecipesFiltered);
}else{
String FilterPattern = constraint.toString().toLowerCase().trim();
for (Recipes item : mRecipesFiltered){
if(item.getmrecipeName().toLowerCase().contains(FilterPattern)){
Filtered.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = Filtered;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults results) {
mRecipes.clear();
mRecipes.addAll((List)results.values);
notifyDataSetChanged();
}
};
}
Я слежу за учебниками codinginflow.com по этому поводу, и он работает, но просто вылетел, не зная, с чего начать.