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);
                }
            }
        }
Другие вопросы по тегам