RecyclerView 可以预加载列表中的前 n 项吗?

Neo*_*rge 2 android android-recyclerview

我有一些项目的列表,我正在使用Glide将图像加载到 ImageView 上。问题是,如果某个特定项目滚动进入屏幕,那是我唯一一次看到使用Glide. 当我在图像加载完成后放置交叉淡入淡出时,这一点很明显。

我从一开始就知道需要的项目数量和其他几个项目,如页眉和页脚。我正在考虑制定一个非常长远的观点来处理所有事情并动态添加那些已知项目onCreate并使用ScrollView我已经完成的项目。我目前使用 a 实现了一种更简单的方法,RecyclerView但我在onBindView通话时间方面遇到了麻烦。

我想要的是在它们出现在屏幕上之前加载前 5 个项目。我希望这会触发我使用 Glide 将图像绑定到 ImageView 上的方法,然后它才能在屏幕中完全可见。

我遵循了本教程,但它对我不起作用。这是我目前的设置:

mComicListingAdapter = new ComicListingsAdapter(getContext(), Constants.CHAPTERS, (ComicListingsAdapter.Callback) getActivity());
mRecycleViewHomeScreen.setAdapter(mComicListingAdapter);
mRecycleViewHomeScreen.setHasFixedSize(true);
mRecycleViewHomeScreen.setItemViewCacheSize(42);
mRecycleViewHomeScreen.setLayoutManager(pcll);
Run Code Online (Sandbox Code Playgroud)

这在 RecyclerView 中可能吗?或者,也许我应该像我一样尝试动态创建ImageView并将它们附加到父级View。它看起来很棒,但在我的情况下使用这种方法有很多事情要做。我只是好奇我是否可以直接RecyclerView提前加载 n 个项目。

谢谢!

Ale*_*xey 6

我找到了一篇博客文章,作者建议扩展 LinearLayoutManager 并覆盖 getExtraLayoutSpace()。

它奏效了。根据 getExtraLayoutSpace() 中返回的像素数,预加载了更多项目。

PS 我还没有检查过这如何影响性能,特别是在棒棒糖之前的设备上。

样本:

val customLayoutManager = CustomLayoutManager(this)
recyclerView = findViewById<RecyclerView>(R.id.recyclerView).apply {
    layoutManager = customLayoutManager
    ... // 
}

class CustomLayoutManager(context: Context?) : LinearLayoutManager(context) {
    override fun getExtraLayoutSpace(state: RecyclerView.State?) = 2000
} 
Run Code Online (Sandbox Code Playgroud)