【问题标题】:how to fire loadmore after fetching and showing every 100 records from realm从领域中获取并显示每 100 条记录后如何触发 loadmore
【发布时间】:2016-12-18 05:42:26
【问题描述】:

Realm recyclerview 在以下地址:realmrecyclerview 具有 loadmore 功能,并且有一个示例项目创建一个 60 个领域对象,然后查询领域并将查询结果设置到 recyclerview 的适配器。在滚动 recyclerview 以结束 onloadmore 后,listner 在 loadmore 函数中被触发,另一个异步方法被调用,该方法创建 60 个对象并保存到领域,然后 recyclerview 显示新对象。 我想使用这个 loadmore 功能对大数据集查询进行分页。我尝试在 onloadmore 函数中进行查询,但适配器没有引用新的查询结果。但是当我重新创建适配器并设置为 recyclerview 时,它正在工作。

【问题讨论】:

  • 从本地数据库读取数据时,您不需要任何“loadmore”功能:您只需要一个可以按需加载数据的适配器,例如github.com/realm/realm-android-adapters/blob/master/adapters/…
  • 你不需要使用 RealmResults 进行分页,因为它的元素是惰性求值的。只需使用RealmRecyclerViewAdapter
  • 我使用 RealmRecyclerView 和 RealmRecyclerViewAdapter 查询和显示 50k 条记录,在 Galaxy S4-mini 上使用 api 17 需要 4-5 秒。查询和获取 RealmResults 是即时的,但将数据加载到 recyclerview 需要时间。尽管使用了异步查询,但有时 UI 线程在加载我不喜欢的数据之前会被阻塞。我在加载数据之前使用了progressdialoge。我在正确的轨道上吗?
  • 获取RealmResults的前10项需要多长时间?
  • 加载到 recyclerview 后,结果突然显示,而不是逐渐显示。我没有测量前 10 个项目的加载

标签: android android-recyclerview realm


【解决方案1】:

这是我的 realmrecyclerview,它扩展了抽象 RealmBasedRecyclerViewAdapter 类:`public class QuoteRecyclerViewAdapter extends RealmBasedRecyclerViewAdapter {

    public QuoteRecyclerViewAdapter(
            Context context,
            RealmResults<QuoteModel> realmResults,
            boolean automaticUpdate,
            boolean animateIdType,
            String animateExtraColumnName) {
        super(context, realmResults, automaticUpdate, animateIdType, animateExtraColumnName);
    }

    public class ViewHolder extends RealmViewHolder {

        public FrameLayout container;

        public TextView quoteTextView;

        public TextView footerTextView;

        public ViewHolder(FrameLayout container) {
            super(container);
            this.container = container;
            this.quoteTextView = (TextView) container.findViewById(R.id.quote_text_view);
            this.footerTextView = (TextView) container.findViewById(R.id.footer_text_view);
        }
    }

    @Override
    public ViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int viewType) {
        View v = inflater.inflate(R.layout.item_view, viewGroup, false);
        return new ViewHolder((FrameLayout) v);
    }

    @Override
    public void onBindRealmViewHolder(ViewHolder viewHolder, int position) {
        final QuoteModel quoteModel = realmResults.get(position);
        viewHolder.quoteTextView.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!quoteModel.isValid()) {
                            return;
                        }
                        asyncRemoveQuote(quoteModel.getId());
                    }
                }
        );
        viewHolder.quoteTextView.setOnLongClickListener(
                new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        asyncUpdateQuote(quoteModel.getId());
                        return true;
                    }
                }
        );
        if (type != null && type.equals("Grid")) {
            viewHolder.container.setBackgroundColor(
                    colors.get((int) (quoteModel.getId() % colors.size())));
        }
        viewHolder.quoteTextView.setText(quoteModel.getQuote());
    }

    @Override
    public void onBindFooterViewHolder(ViewHolder holder, int position) {
        holder.footerTextView.setText("I'm a footer");
    }

    @Override
    public ViewHolder onCreateFooterViewHolder(ViewGroup viewGroup) {
        View v = inflater.inflate(R.layout.footer_view, viewGroup, false);
        return new ViewHolder((FrameLayout) v);
    }
}`

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多