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

时间:2016-09-27 05:01:12

标签: android android-recyclerview

我有一些项目的列表,我正在使用Glide将图像加载到ImageView上。问题是,如果某个特定项目滚动进入屏幕,那是我唯一一次使用Glide绘制图像。当我在图像加载完成后放置交叉渐变时,这是显而易见的。

我从一开始就知道所需的项目数量和其他一些项目,如页眉和页脚。我正在考虑制作一个非常长的视图来处理所有内容并在onCreate动态添加这些已知项目,并使用我已经完成的ScrollView。我目前使用RecyclerView实现了一种更简单的方法,但我对onBindView调用的时间有疑问。

我想要的是在屏幕上显示之前加载前5个项目。我希望这将触发我将图像与Glide绑定到ImageView之前在屏幕上完全可见之前的方法。

我遵循了这个tutorial,它不适合我。这是我目前的设置:

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

这在RecyclerView中是否可行?或者我应该尝试动态创建ImageView并将其附加到父View,就像我这样做的那样。它看起来很棒,但在我的情况下使用这种方法有很多事情要做。我很好奇我是否可以指示RecyclerView提前加载n个项目。

谢谢!

2 个答案:

答案 0 :(得分:2)

Views是在运行时动态创建的,您只能通过适配器的onBindViewHolder方法访问视图项。您希望在将适配器设置为回收器视图之前加载图像。首先调用getItemCount方法查找项目数,然后调用onCreateViewHolder方法在RecyclerView中绘制一行。

因此,RecyclerView无法在设置任何Adapter之前访问项目。您需要通过动态创建ImageView来以其他方式实现此目的。例如。

答案 1 :(得分:1)

我发现了blog post,作者建议扩展LinearLayoutManager并覆盖getExtraLayoutSpace()。

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

P.S。我尚未检查它如何影响性能,尤其是在棒棒糖之前的设备上。

示例:

cell.buttonDelegate = buttonDelegate