5

设置 :

我们使用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 invalidationpagedListrequest将列表中要获取的最后一项作为requestedInitialKey / item in the firstPage而不是the last item that was displayed before invalidation?。抱歉,如果我完全误解了这件事,但无法真正理解它。

问题 :

我希望pagedList从前一个滚动位置而不是前一个 pagedList 中的最后一项失效后开始获取新 PagedList 中的第一页。

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

  • 如果我目前也不能这样做,那么推荐的实现这一要求的方法是什么?

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

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

4

1 回答 1

0

我们解决这个问题的方法是,UI 只从房间数据库中侦听作为单一事实来源。该设置中不存在此问题。但是当我们使用 ItemKeyedDatasource 时,这个问题一直持续到现在。

于 2019-08-04T05:15:50.100 回答