Фильтровать RecyclerView по значению внутри объекта

У меня есть RecyclerView, который возвращает список объектов во фрагмент, я хочу, чтобы фрагмент отображал только объекты, которые имеют определенное значение в одной из своих переменных. Как я могу это сделать?

Вот как я называю свой адаптер на фрагменте:

RecyclerView recyclerview = view.findViewById(R.id.list);

if (recyclerview != null) {
    Context context = view.getContext();
    adapter = new MyHospitalHistoryRecyclerViewAdapter(DummyContent.ITEMS, mListener);
    recyclerview.setAdapter(adapter);
}

return view;

DummyContent.ITEMS — это список типа DummyItems.

Кто-нибудь знает, как я могу это сделать? Я проверил все, что знаю

попробуйте создать пустой List и заполните его своими конкретными значениями, используя If и Else, после чего установите его в свой adapter

Mouaad Abdelghafour AITALI 18.05.2019 22:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
311
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте добавить логику фильтра в адаптер, например:

class MyAdapter extends RecyclerView.Adapter<MyViewHolder> implements Filterable {
      private NewFilter mFilter = new NewFilter();
      private List<MyData> mItems;
      private List<MyData> mFiltered = new ArrayList<>();     // <--- use this collection in all required getItemsCount and onBindViewHolder methods

      @Override
      public Filter getFilter {
            return mFilter;
      }

      public class NewFilter extends Filter {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                mFiltered .clear();
                final FilterResults results = new FilterResults();
                if (charSequence.length() == 0){
                    mFiltered .addAll(mItems);
                }else{
                    final String filterPattern =charSequence.toString().toLowerCase().trim();
                    for(MyData item: mItems) {
                        if (item.getMyProperty().toLowerCase().contains(filterPattern)){ // replace this condition with actual you need
                            mFilteredItems.add(item);
                        }
                    }
                }
                results.values = mFilteredItems;
                results.count = mFilteredItems.size();
                return results;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                this.mAdapter.notifyDataSetChanged();
            }
        }

Затем вы можете использовать его во фрагменте только с помощью:

adapter.getFilter().filter("hello");

Строка выше обновляет список только элементами, которые содержат «привет» в свойстве «myProperty».

Я пробовал фильтры раньше, но я действительно не мог заставить их работать, ваша логика фильтра выглядит нормально, но она не отображается .filter на объекте адаптера, чего-то не хватает?

Skepller 18.05.2019 23:58

@Skepller, я пропустил вызов одного метода. Попробуйте adapter.getFilter().filter("hello");, пожалуйста. Извините за введение в заблуждение.

S-Sh 19.05.2019 12:06

Хорошо, это сработало с небольшими изменениями в фильтре, большое спасибо за помощь!

Skepller 19.05.2019 19:51

@Skepller, с наилучшими пожеланиями

S-Sh 19.05.2019 20:19

Другие вопросы по теме