【发布时间】:2019-10-27 15:49:04
【问题描述】:
设置:
我们正在使用PagedListEpoxyController、RxPagedListBuilder、ItemKeyedDataSource 和运行时Mockgenerator,它只是根据生成的数据索引创建用户,例如。 user1、user100、user500等
分页配置为:
val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16
预期行为
每当我们向下滚动到第第400项并返回到第第300项和通过点击关注/取消关注 UI 跳转使列表无效。单击按钮时,PagedList 无效,如下所示:
followers.dataSource.invalidate()
ItemKeyedDataSource 内的loadInitial() 应该使用params.key 的值调用,这样我们就可以获得之前显示的相同页面以重新显示。例如,如果 user300 在屏幕中可见,则该项目 requestedInitialKey 应该在 [user221,user280] 范围内。 p>
问题出在哪里?
失效前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 中的第一页 。
但如果 PagedList 不应该以这种方式工作,那么 我如何知道在失效之前在屏幕中之前可见的任何项目/索引?
如果我目前也不能这样做,推荐的实现此要求的方法是什么?
这个问题可以在这里找到:
重现:向下滚动足够远(如第 60 项)并按 “刷新”,您将在列表中看到跳转。 Link to github issue
【问题讨论】:
-
有什么更新吗?我的项目也有同样的问题。
标签: android android-recyclerview android-jetpack android-paging epoxy