RecycleView的setInitialPrefetchItemCount无法正常工作

时间:2017-10-26 15:40:07

标签: android android-recyclerview gridlayoutmanager

我正在尝试通过使用支持库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,因为我将它设置为是这样的。

2 个答案:

答案 0 :(得分:3)

正如@FlanschiFox和他的回答下方的评论所说,这仅适用于内部RecyclerViews。另外,我写了一个PreloadLinearLayoutManager here以在列表滚动到末尾之前预加载5个数据。可能会对您有所帮助。

答案 1 :(得分:1)

根据文档,这仅适用于内部RecyclerViews。

文档:isItemPrefetchEnabled

  

设置collectInitialPrefetchPositions(int,LayoutPrefetchRegistry)中预取的项目数,它定义当此LayoutManager的RecyclerView嵌套在另一个RecyclerView中时应预取多少内部项目。