просмотр и поиск recycler с realm db [duplicate]

yes: :has()

поддержка браузера: none

5
задан ste9206 16 November 2016 в 11:54
поделиться

1 ответ

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

private class AirportAdapter
        extends RealmRecyclerViewAdapter<AirportR, RecyclerView.ViewHolder>
        implements Filterable {
    Realm realm;

    public AirportAdapter(Context context, Realm realm, OrderedRealmCollection<AirportR> 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<AirportR> 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());
        }
    }
}
8
ответ дан EpicPandaForce 19 August 2018 в 16:38
поделиться
  • 1
    он отлично работает! спасибо за вашу драгоценную помощь! – ste9206 16 November 2016 в 14:23
  • 2
    Рад слышать, что я могу упростить использование вами Царства: p – EpicPandaForce 16 November 2016 в 14:49
  • 3
    @EpicPandaForce - Не могли бы вы показать мне updateData (listAirports); как я могу обновить элементы списка после фильтра и до него? – user2269164 8 March 2017 в 12:54
  • 4
    @ user2269164 это метод RealmRecyclerViewAdapter из github.com/realm/realm-android-adapters – EpicPandaForce 8 March 2017 в 12:55
  • 5
    Ошибка копирования-вставки @pentarex. Там даже не должно быть. – EpicPandaForce 16 May 2017 в 11:05
Другие вопросы по тегам:

Похожие вопросы: