我正在尝试通过使用支持库25.1中引入的新API来提前预取视图来滚动图像网格,以控制RecycleView中预取项目的数量,从而改善用户体验。
GridLayoutManager layoutManager = new GridLayoutManager(this.getContext(), PhotoGridViewHolder.SPAN_SIZE);
layoutManager.setItemPrefetchEnabled(true);
layoutManager.setInitialPrefetchItemCount(30);
photosRecycleView.setLayoutManager(layoutManager);
... add 100 photos to the adapter ...
我还为ViewHolders添加了日志记录,因此我可以看到绑定是否真的发生了。
void bind(final Photo photo, int position) {
// I expcet to see 30 logs without event scrolling as the intial set to 30.
log.d("binding photo: " + photo.getId());
loadPhoto(photo);
}
然而,它似乎不起作用,因为我加载了100个图像的列表,但我只看到几个日志条目(只是获取可见项目),但是我希望看到30,因为我将它设置为是这样的。
答案 0 :(得分:3)
正如@FlanschiFox和他的回答下方的评论所说,这仅适用于内部RecyclerViews。另外,我写了一个PreloadLinearLayoutManager
here以在列表滚动到末尾之前预加载5个数据。可能会对您有所帮助。
答案 1 :(得分:1)
根据文档,这仅适用于内部RecyclerViews。
设置collectInitialPrefetchPositions(int,LayoutPrefetchRegistry)中预取的项目数,它定义当此LayoutManager的RecyclerView嵌套在另一个RecyclerView中时应预取多少内部项目。