SearchView не работает должным образом
У меня есть SearchView и RecyclerView внутри моего фрагмента, и я создал getFilter
метод для добавления функции поиска, но моя проблема заключается в следующем SearchView
не работает, как я должен столкнуться с двумя проблемами, которые описаны ниже
1 - предположим, у меня есть данные для поиска, например, { String1, String two, String three } s
тогда я получаю только результат String1
значит получаю результат по последнему слову моей строки
пожалуйста, смотрите изображение для получения того, что я пытаюсь объяснить
на этом изображении вы видите, я получаю результат в соответствии с последним словом моей строки
вот как я создал GetFilter
внутри моего класса адаптера
private static class UserFilter extends Filter {
private final NotesAdapter adapter;
private final List<Information> originalList;
private final List<Information> filteredList;
private UserFilter(NotesAdapter adapter, List<Information> originalList) {
super();
this.adapter = adapter;
this.originalList = new LinkedList<>(originalList);
this.filteredList = new ArrayList<>();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(originalList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (final Information user : originalList) {
if (user.title.contains(filterPattern)) {
filteredList.add(user);
}
}
}
results.values = filteredList;
results.count = filteredList.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
adapter.filteredUserList.clear();
adapter.filteredUserList.addAll((ArrayList<Information>) results.values);
adapter.notifyDataSetChanged();
} }
и вот как я использую этот метод в моем фрагменте
Search_View.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String Text) {
Log.v(""+Text , " searchView TextSubmit" );
Log.d("tag", "notesAdapter=" + notesAdapter);
notesAdapter.getFilter().filter(Text);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
Log.v(""+newText , " searchView TextChange" );
Log.d("tag", "notesAdapter=" + notesAdapter);
notesAdapter.getFilter().filter(newText);
return true;
}
});
если кто-нибудь знает, что я делаю не так, пожалуйста, помогите мне, застрял здесь со вчерашнего дня
1 ответ
Получил решение отсутствовало, чтобы преобразовать мой user.title
в нижний регистр
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(originalList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (final Information user : originalList) {
if (user.title.toLowerCase().contains(filterPattern)) {
filteredList.add(user);
}
}
}