как реализовать фильтрацию в RealmRecyclerViewAdapter

Я использую хорошо RealmRecyclerViewAdapter. Моя проблема заключается в реализации Filterable который не работает. Это код:

  private class AirportAdapter extends RealmRecyclerViewAdapter implements Filterable { Context context; OrderedRealmCollectionlistAirports; public AirportAdapter(Context activity, OrderedRealmCollectionairports) { super(activity,airports, true); this.context = activity; this.listAirports = airports; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.airport_show, parent,false); AirportClass holder = new AirportClass(view); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { AirportR airportR = listAirports.get(position); AirportClass mHolder = (AirportClass)holder; mHolder.country.setText(airportR.getIsoCountry()); mHolder.name.setText(airportR.getName()); } public Filter getFilter() { AirportFilter filter = new AirportFilter(this, listAirports); return filter; } private class AirportFilter extends Filter { private final AirportAdapter adapter; OrderedRealmCollectionoriginalList; OrderedRealmCollectionfilteredList; private AirportFilter(AirportAdapter adapter, OrderedRealmCollection originalList) { super(); this.adapter = adapter; this.originalList = originalList; } @Override protected FilterResults performFiltering(CharSequence constraint) { filteredList.clear(); final FilterResults results = new FilterResults(); if (constraint.length() == 0) { filteredList.addAll(originalList); } else { final String filterPattern = constraint.toString().toLowerCase().trim(); for (final AirportR airportR : originalList) { if (airportR.getName().toLowerCase().contains(filterPattern)) { filteredList.add(airportR); } } } results.values = filteredList; results.count = filteredList.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { adapter.listAirports.addAll((OrderedRealmCollection) results.values); adapter.notifyDataSetChanged(); } } private class AirportClass extends RecyclerView.ViewHolder { TextView name, country; ImageView image; public AirportClass(View itemView) { super(itemView); name = (TextView)itemView.findViewById(R.id.name); country = (TextView)itemView.findViewById(R.id.country); image = (ImageView)itemView.findViewById(R.id.imageView); } } } 

и я возвращаю ошибку:

 java.lang.UnsupportedOperationException: This method is not supported by RealmResults. at io.realm.RealmResults.addAll(RealmResults.java:710) at com.example.matteo.downloadairports.fragment.ListAirportFragment$AirportAdapter$AirportFilter.publishResults 

как я могу сохранить результат после того, как я его фильтрую и обновляю адаптер?

благодаря

Переместите фильтрацию в publishResults и используйте publishResults пользовательского интерфейса Realm для оценки новых результатов.

 private class AirportAdapter extends RealmRecyclerViewAdapter implements Filterable { Realm realm; public AirportAdapter(Context context, Realm realm, OrderedRealmCollection airports) { super(context, airports, true); this.realm = realm; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.airport_show, parent, false); AirportClass holder = new AirportClass(view); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { AirportR airportR = getData().get(position); AirportClass mHolder = (AirportClass) holder; mHolder.bind(airportR); } public void filterResults(String text) { text = text == null ? null : text.toLowerCase().trim(); RealmQuery query = realm.where(AirportR.class); if(!(text == null || "".equals(text))) { query.contains("fieldToQueryBy", text, Case.INSENSITIVE) // TODO: change field } updateData(query.findAllAsync()); } public Filter getFilter() { AirportFilter filter = new AirportFilter(this); return filter; } private class AirportFilter extends Filter { private final AirportAdapter adapter; private AirportFilter(AirportAdapter adapter) { super(); this.adapter = adapter; } @Override protected FilterResults performFiltering(CharSequence constraint) { return new FilterResults(); } @Override protected void publishResults(CharSequence constraint, FilterResults results) { adapter.filterResults(constraint.toString()); } } private class AirportClass extends RecyclerView.ViewHolder { TextView name, country; ImageView image; public AirportClass(View itemView) { super(itemView); name = (TextView) itemView.findViewById(R.id.name); country = (TextView) itemView.findViewById(R.id.country); image = (ImageView) itemView.findViewById(R.id.imageView); } public void bind(AirportR airportR) { country.setText(airportR.getIsoCountry()); name.setText(airportR.getName()); } } } 
  • Просмотр списка фильтров Android
  • Пользовательский фильтр ArrayAdapter в ListView
  • Запуск пользовательского приложения для Android от браузера android
  • Как динамически обновлять ListView на Android
  • Как создать RESTful поиск / фильтрацию?
  • Как фильтровать массив из всех элементов другого массива
  • Как эффективно фильтровать фрейм данных?
  • Лучшее место для установки CurrentCulture для многоязычных веб-приложений ASP.NET MVC
  • Что такое фильтры намерений в Android?
  • ExtJs - Фильтрация сетки с полем поиска в заголовке столбца
  • Power BI Встраивание URL-множественных фильтров
  • Interesting Posts

    Угловая обработка HTTP-ответа

    Могу ли я обернуть каждую строку многострочного текста в промежутке?

    Контейнеры стандартной библиотеки с дополнительными параметрами шаблона?

    Нет совпадений маршрута / активы

    Объединить легенды о цвете и форме в одну легенду

    Windows не будет распознавать сетевой принтер

    Что такое хороший шаблонный шаблон шаблона singleteton singleton в C #

    Прокрутка файлов в папке в matlab

    Системная ошибка. Код: 8. Недостаточно памяти для обработки этой команды

    Что подразумевается под инициализацией ресурсов (RAII)?

    Замена команды: обратные ссылки или знак доллара / парад заключены?

    Coldfusion 10 returnformat = “JSON” добавление символов

    java.lang.IllegalStateException: не удается выполнить это действие после onSaveInstanceState

    Как вы повторно ассоциируете резервную копию транспортного средства в аэропорту после перехода на новый Mac?

    Как настроить символы в WinDbg?

    Давайте будем гением компьютера.