设置:
我们使用的是PagedListEpoxyController、RxPagedListBuilder、ItemKeyedDataSource和一个运行时Mockgenerator,该运行时Mockgenerator只为例如,为生成的数据索引创建一个用户。user1,user100,user500等。
分页配置是:
val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16预期行为
每当我们向下滚动到Follow/Unfollow时,400项和返回到300项,通过单击UI跳转使E 216列表失效。当单击按钮时,PagedList将失效,如下所示:

followers.dataSource.invalidate()
应该用loadInitial()的值调用ItemKeyedDataSource内部的params.key,这样我们就可以得到以前显示的页面以重新显示。例如,如果user300是屏幕上的visible,那么项目requestedInitialKey应该在user221,user280的范围内。
问题在哪里?
在失效之前,last item that was fetched in the pagedList的分页库跟踪but does not提供了一种方法,可以在失效之前知道屏幕中的哪个是last item/range that was visible。
在使pagedList失效之后,在pagedList失效后调用的第一个回调是loadInitial(params : LoadInitialParams, callback : LoadInitialCallback),params只保存关于pageSize和占位符的信息,以及在失效之前requestedInitialKey作为last item that was fetched的信息,这是非常误导的。为什么,after invalidation a pagedList会将列表中的最后一项作为requestedInitialKey / item in the firstPage而不是the last item that was displayed before invalidation获取?对不起,如果我完全误解了这件事,但并没有真正理解它。
问题:
我希望pagedList能够在新的PagedList中的第一个页面从上一个滚动位置(而不是前一个pagedList中的最后一个条目)失效后,开始获取它。
这个问题可以在这里找到:
要复制:向下滚动足够远(像第60项)并按“刷新”,您将看到列表中的跳转。链接到github问题
发布于 2019-08-04 05:15:50
我们解决这个问题的方法是,UI只从会议室数据库作为一个单一的真实来源来聆听。此设置中不存在此问题。但是当我们使用ItemKeyedDatasource时,这个问题一直持续到现在。
https://stackoverflow.com/questions/56573909
复制相似问题