#android #listview #filter #adapter #searchview
#Android #listview #Фильтр #адаптер #searchview
Вопрос:
Я добавил searchview с listview в свой проект-приложение.
У меня проблема в том, что searchview игнорирует все заглавные буквы, например:
Когда я набираю «pple» в searchviw, в listview отображается строка Apple. Но когда я набираю Apple или apple, он не находит яблоко. Когда я меняю строку с Apple на apple, она работает, когда я набираю apple, но не когда я набираю Appel…
Надеюсь, я не усложнил это сейчас: D
Я использую следующий код фильтра:
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint == null || constraint.length() == 0){
filterResults.count = itemsModelsl.size();
filterResults.values = itemsModelsl;
}else{
List<itemsmodel> resultsModel = new ArrayListamp;<>();
String searchStr = constraint.toString().toLowerCase();
for(ItemsModel itemsModel:itemsModelsl){
if(itemsModel.getName().contains(searchStr) || itemsModel.getEmail().contains(searchStr)){
resultsModel.add(itemsModel);
filterResults.count = resultsModel.size();
filterResults.values = resultsModel;
}
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
itemsModelListFiltered = (List<itemsmodel>) results.values;
notifyDataSetChanged();
}
};
return filter;
}
Пожалуйста, дайте мне знать, если вам нужно больше кода.
Заранее спасибо.
Бг Даниэль
Ответ №1:
Это потому, что вы ввели поисковый ввод в нижнем регистре, но не само имя элемента. Поэтому, когда вы вводите "Apple"/"apple"
, поисковый ввод на самом деле представляет собой только версию в нижнем регистре : "apple"
. С другой стороны, имя элемента "Apple"
таково, что оно не может быть сопоставлено.
Попробуйте:
...
if (itemsModel.getName().toLowerCase().contains(searchStr) || itemsModel.getEmail().toLowerCase().contains(searchStr)) {
...
}
...