【问题标题】:How to implement a lazy loading recyclerView adapter like realm recyclerView adapter using kotlin如何使用 kotlin 实现延迟加载 recyclerView 适配器,如领域 recyclerView 适配器
【发布时间】:2026-02-16 01:05:01
【问题描述】:

我需要实现一个 recyclerView 来显示我在 Parse 上的查询,所以我已经完成了:

 private class Pagination extends RecyclerView.OnScrollListener{

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        visibleItemCount = manager.getChildCount();
        totalItemCount = manager.getItemCount();
        firstVisibleItemPosition = manager.findFirstVisibleItemPosition();


        if (!isLoading && !isLastPage) {
            if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
                    && firstVisibleItemPosition >= 0
                    && totalItemCount >= PAGINATION) {
                isLoading = true;

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        loadData();
                    }
                }, 2000);
            }
        }
    }
}

而且效果很好。但是几个月前,我使用了无需分页即可工作的领域 recyclerView 适配器(它工作得很好,因为我有 50k 项要显示),我想制作一个这样的适配器。我也使用过 Kotlin,并且看到了惰性变量的概念:

val lazyValue: String by lazy {
println("computed!")
"Hello"
}

但我不知道如何使用它来制作适配器,因为这个原因:现在当我做一个查询来解析它是这样的:

 val dishes = ParseQuery.getQuery<ParseObject>("Books").setSkip(index).setLimit(pagination)

 dishes.findInBackground { objects, e -> e?.let { listener?.onPaginationError(e.message)  } ?:run { createNewDish(objects,listener,false)  } }

当我使用惰性方法时它是如何工作的?我需要下载所有项目还是需要分页?

【问题讨论】:

  • 你到底想用lazy做什么?
  • @chandil03 等待来自 Parse 的 List,它们可能是 100/1000 等
  • 这种情况下不使用惰性函数。当你想在你的第一个方法调用上加载资源时使用惰性函数,而不是在初始化变量时。

标签: java android android-recyclerview realm kotlin


【解决方案1】:

我使用了无需分页即可工作的领域 recyclerView 适配器(它工作得非常好,因为我有 50k 项要显示),我想制作一个这样的适配器。

其实这是 Realm 的魔力,而不是适配器。而且你无法获得相同的品味,因为 Realm 的延迟加载架构将比服务器端分页等其他架构超级快。对不起,你不能模仿它。

我需要下载所有项目还是需要分页?

如果服务器端数据源无法处理分页请求,则必须先加载所有项目,然后在客户端查询并让适配器在recyclerview上显示项目

当我使用惰性方法时它是如何工作的?

我的理解是,你想结合 kotlin 的惰性和分页?

适配器已经需要一个数据集(可能来自数据源的 10 到 20 个项目)在需要时显示。所以我看不到 kotlin 的懒惰有任何合适的用法。

【讨论】:

    最近更新 更多