首页 > 解决方案 > Android Paging 3 Library - 使用下一次加载更新第 1 页 VH

问题描述

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

例子

第 1 页网络请求:

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 中,但是从 2.3.0-alpha01 开始,Room 不支持生成一对多相关对象的 PagingSource。

感谢大家。

标签: androidandroid-pagingandroid-paging-library

解决方案


由于您需要编辑现有项目,因此最好使用分层方法使用RemoteMediator.

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

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


推荐阅读