设置 :
我们使用PagedListEpoxyController
, RxPagedListBuilder
,ItemKeyedDataSource
运行时Mockgenerator
,它只是根据生成的数据索引创建一个用户,例如。用户 1、用户 100、用户 500等。
分页配置为:
val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16
预期行为
每当我们向下滚动到第400项并返回到第300项并通过单击“关注/取消关注”使列表无效时,UI 会跳转。单击按钮时,PagedList 会像这样无效:
followers.dataSource.invalidate()
loadInitial()
insideItemKeyedDataSource
应该使用值调用,params.key
以便我们可以重新显示之前显示的相同页面。例如,如果user300在屏幕中可见,则该项目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
pagedListrequest
将列表中要获取的最后一项作为requestedInitialKey / item in the firstPage
而不是the last item that was displayed before invalidation
?。抱歉,如果我完全误解了这件事,但无法真正理解它。
问题 :
我希望pagedList
在从前一个滚动位置而不是前一个 pagedList 中的最后一项失效后开始获取新 PagedList 中的第一页。
但是,如果 PagedList 不应该以这种方式工作,那么我如何知道在失效之前之前在屏幕中可见的任何项目/索引?
如果我目前也不能这样做,那么推荐的实现这一要求的方法是什么?
这个问题可以在这里找到:
重现:向下滚动足够远(如第 60 项)并按“刷新”,您将在列表中看到跳转。 链接到 github 问题