我正在使用新的Android Paging库来获取具有无限滚动的RecyclerView。我不明白为什么在我这样设置PagedList时库不触发loadAfter()方法:
val config: PagedList.Config = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPageSize(10)
.setPrefetchDistance(1)
.setInitialLoadSizeHint(10)
.build()
val pageList = PagedList.Builder(LookDataSource(lookList), config)
.setInitialKey(0)
.setMainThreadExecutor(MainThreadExecutor())
.setBackgroundThreadExecutor(PaginationThreadPoolExecutor())
.setBoundaryCallback(LookBoundaryCallback())
.build()
注意:我的prefetchDistance为1,因为我想在看到最后一个项目时加载另一批数据。该文档说0将永远不会加载更多数据
我的数据源是一个 PageKeyedDataSource ,键是页面的索引。
我已经研究了 ContiguousPagedList 的源代码,它是在您使用PageKeyedDataSource时创建的特定PagedList,我无法理解它们:
@MainThread
@Override
protected void loadAroundInternal(int index) {
int prependItems = mConfig.prefetchDistance - (index - mStorage.getLeadingNullCount());
int appendItems = index + mConfig.prefetchDistance
- (mStorage.getLeadingNullCount() + mStorage.getStorageCount());
mPrependItemsRequested = Math.max(prependItems, mPrependItemsRequested);
if (mPrependItemsRequested > 0) {
schedulePrepend();
}
mAppendItemsRequested = Math.max(appendItems, mAppendItemsRequested);
if (mAppendItemsRequested > 0) {
scheduleAppend();
}
}
根据我的配置,当我看到最后一个项目时,appendItems值为0
与
给
基于此,由于mAppendItemsRequested始终也为0,因此永远不会调用scheduleAppend()。
我发现在滚动上实际加载更多数据的唯一方法是将我的prefetchDistance设置为大于1的任何值。话虽如此,这似乎比解决此问题的方法要好得多。
最佳答案
用PagedListAdapter替换ListAdapter