SearchView игнорирует заглавную букву

#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)) {
   ...
}
...