Android Paging 3 - 从 PagingData<T> 对象获取数据列表

P.D*_*dik 14 paging pagination android list android-recyclerview

我正在使用新的 jetpack Paging 3 库。我有一个特定的用例。我想使用 viewmodel 在两个屏幕之间共享这些数据。

一个屏幕需要分页数据,而对于第二个屏幕,我想要这些数据的简单列表(不是分页列表,我需要使用列表...)。我不想在 PagingData 的对象中列出。

有没有办法在没有 PagingData 对象的情况下获取列表? 在此处输入图片说明

如您所见,没有获取此数据的变量。我什至在创建流时在 viewModel 中尝试过,但我还没有找到解决方案。

dla*_*lam 9

PagingData 只是一个无状态的增量加载事件流,所以它不保存这种状态。

但是PagingDataAdapter/ 不同(以及类似的其他演示者端变体)已经需要保存数据,因此它们公开了PagingDataAdapter.snapshot()可以为您提供当前显示项目列表的API 。

请记住,呈现的数据是转换后的,可能不包括由于超出而丢弃的页面maxSize,并且还可能与 fetcher 竞争,因为在加载数据和让它显示在 UI 之间需要一些时间。

这实际上取决于您对准确跟踪感兴趣的内容,但是从 fetcher 端(跟踪预转换),您可以根据返回的结果构建列表,PagingSource也可以编写一个 no-op .map() 运算符,在PagingData该运算符上将看到每个项目(但不会为您提供有关订单的信息)。

不幸的是,Paging3 还没有提供可以为您构建这种状态的非 ui 收集器(在测试中最有用),但希望我们将来可以研究一下。

  • 与 Paging2 相比,Paging3 看起来像是一团复杂的混乱 (5认同)
  • @diam 那么你将如何测试 PagingData 呢? (2认同)