pagedList 失效后 PagedList RecyclerView 跳转

erl*_*man 5 android android-recyclerview android-jetpack android-paging epoxy

设置 :

我们正在使用PagedListEpoxyController, RxPagedListBuilder,ItemKeyedDataSource和一个运行时Mockgenerator,它只根据生成的数据索引创建一个用户,例如。用户 1、用户 100、用户 500

分页配置是:

val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16
Run Code Online (Sandbox Code Playgroud)

预期行为

每当我们向下滚动到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的,并沿着信息的占位符requestedInitialKeylast item that was fetched无效之前,这是非常误导。为什么,after invalidationpagedListrequest将列表中要获取的最后一项作为 therequestedInitialKey / item in the firstPage而不是the last item that was displayed before invalidation? 。对不起,如果我完全误解了这件事,但无法真正理解它。

题 :

我想pagedList,以开始获取第一页从失效后,在新的PagedList以前的滚动位置,而不是在之前pagedList最后一个项目

  • 但是,如果 PagedList 不应该以这种方式工作,那么我如何知道在失效之前之前在屏幕中可见的任何项目/索引

  • 如果我目前也无法做到这一点,那么推荐的实现此要求的方法是什么?

这个问题可以在这里找到:

重现:向下滚动足够远(如第 60 项)并按“刷新”,您将看到列表中的跳转。 链接到github问题