(гугл переводчик)
Введение
Я искал это решение, но не нашел его. Если есть дубликат этой проблемы, пожалуйста, дайте мне знать. спасибо.
Проблема:
Я создал приложение для хранения с базой данных Room и RecycleView. Затем я искал способы добавить Поиск к моим данным. Все прошло гладко, но была одна проблема.
Если искомое слово сокращено, тогда поиск ограничен видимыми данными. (Посмотрите на скриншот)
- Нормальный
- Поиск выполнен (Обычный)
- Пустое слово
- Поиск снова и результат
- GIF-изображение
Надеюсь, вы понимаете.
Пожалуйста, помогите мне. Я видел много уроков, но ничего не работает.
спасибо
Мой код:
Фильтр в моем адаптере
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
List<Barang> filteredList = new ArrayList<>();
if (charString.isEmpty()) {
filteredList.addAll(namaBarang);
} else {
for (Barang row : namaBarang) {
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
if (row.getNamaBarang().toLowerCase().contains(charString.toLowerCase())) {
filteredList.add(row);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
namaBarang = (ArrayList<Barang>) filterResults.values;
notifyDataSetChanged();
}
};
}
MainActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
adapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// t = newText.;
adapter.getFilter().filter(newText);
return false;
}
И у меня это тоже есть в моем адаптере:
void setBarangs(List<Barang> barangs){
namaBarang = barangs;
notifyDataSetChanged();
}