【问题标题】:Android Paging 3 Library - Update 1st page VH with next loadsAndroid Paging 3 Library - 使用下一次加载更新第 1 页 VH
【发布时间】:2020-07-09 12:03:12
【问题描述】:

使用 Paging 3 Library,是否可以在第二页加载时更新第一页的 ViewHolder,而不是插入新项目?我显示的数据按日期分组(嵌套 RecyclerView),第二次加载有时可能包含来自第一页 ViewHolder 的项目。

示例

第一页网络请求:

Jan 1st 2020 - X Y Z

Jan 2nd 2020 - A B

第二页网络请求:

Jan 2nd 2020 - E F

我希望我的主 RecyclerView 在这 2 个网络请求之后仅包含 2 个项目:

Jan 1st 2020 - X Y Z
Jan 2nd 2020 - A B E F

关于网络响应的说明

我的 API 以这种方式返回数据:

X - Jan 1st 2020
Y - Jan 1st 2020
Z - Jan 1st 2020
A - Jan 2nd 2020
B - Jan 2nd 2020

我尝试将我的数据插入到日期和项目之间具有一对多关系的 Room DB 中,但 Room 不支持从 2.3.0-alpha01 开始生成一对多相关对象的 PagingSource .

谢谢大家。

【问题讨论】:

    标签: android android-paging android-paging-library


    【解决方案1】:

    由于您需要编辑现有项目,这可能最好通过使用RemoteMediator 的分层方法来完成。

    您的PagingSource 实现将基于本地缓存的数据(Room 在这里是一个不错的选择),当本地缓存用完数据时,RemoteMediator 可能会被触发以获取更多项目,然后会查询现有的缓存中的项目,修改它们并插入新项目,然后使 PagingSource 无效,以便它知道新的更改。

    失效是目前在转换之外更新现有数据的唯一方法。我们想添加新的运算符,但还没有适合此用例的 fold / reduce / deduplicate 之类的东西。

    【讨论】:

    • 我忘记提到的一件事是我的数据以 A B E F X Y Z 列表的形式返回,依此类推。如果我明白你在说什么,我应该以我显示它们的形式缓存这些数据(已经按日期分组)。如果 PagingSource 返回包含 2 个项目(2 个不同日期)的页面,是否可以,即使我的网络调用返回 15(在这两个日期之间调度)?
    • 我刚刚尝试过,但在我的情况下似乎不起作用,因为 Room 无法为一对多映射对象创建 PagingSource getter。我无法以这种方式获取包含相关项目的日期列表
    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2018-12-19
    • 2019-04-17
    • 1970-01-01
    • 2011-10-22
    • 2022-09-27
    • 2021-02-19
    相关资源
    最近更新 更多