设置 :
我们将PagedListEpoxyController
,RxPagedListBuilder
,ItemKeyedDataSource
与运行时Mockgenerator
结合使用,后者仅针对生成的数据索引创建用户,例如。 user1,user100,user500 等。
分页配置为:
val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16
预期行为
每当我们向下滚动到时,第400个项目和将返回到第300个项目,并且通过单击跟随/取消跟随UIt_rstrong使列表失效。单击按钮时,PagedList无效,如下所示:
followers.dataSource.invalidate()
应该使用
loadInitial()
的值调用ItemKeyedDataSource
中的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
一个pagedList会将列表中要提取的最后一项作为request
而不是requestedInitialKey / item in the firstPage
进行the last item that was displayed before invalidation
呢?抱歉,如果我完全误解了这个东西,但无法真正理解它。问题 :
我希望
pagedList
到在从上一个滚动位置而不是上一个pagedList 的最后一个条目无效后,开始在新的PagedList中获取第一页。这个问题可以在这里找到:
重现:向下滚动足够远(如第60项),然后按“刷新” ,您将在列表中看到跳转。
Link to github issue
最佳答案
我们解决此问题的方法是,UI仅从Room Database监听为唯一的事实来源。该设置中不存在此问题。但是,当我们使用ItemKeyedDatasource时,这个问题一直持续到现在。
关于android - PagedList RecyclerView在pagedList失效后跳转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56573909/