设置 :

我们将PagedListEpoxyControllerRxPagedListBuilderItemKeyedDataSource与运行时Mockgenerator结合使用,后者仅针对生成的数据索引创建用户,例如。 user1,user100,user500 等。

分页配置为:

val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16

预期行为

每当我们向下滚动到时,第400个项目和返回到第300个项目,并且通过单击跟随/取消跟随UIt_rstrong使列表失效。单击按钮时,PagedList无效,如下所示:

android - PagedList RecyclerView在pagedList失效后跳转-LMLPHP
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中获取第一页

  • 但是如果PagedList不能以这种方式工作,那么我如何才能知道无效之前在屏幕上可见的的任何项目/索引?
  • 如果我目前也不能这样做,推荐使用达到此要求的方法是吗?

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

    重现:向下滚动足够远(如第60项),然后按“刷新” ,您将在列表中看到跳转。
    Link to github issue

    最佳答案

    我们解决此问题的方法是,UI仅从Room Database监听为唯一的事实来源。该设置中不存在此问题。但是,当我们使用ItemKeyedDatasource时,这个问题一直持续到现在。

    关于android - PagedList RecyclerView在pagedList失效后跳转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56573909/

    10-11 01:26