android - 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。
感谢大家。
解决方案
由于您需要编辑现有项目,因此最好使用分层方法使用RemoteMediator
.
您的PagingSource
实现将基于本地缓存的数据(Room 在这里是一个不错的选择),当本地缓存用完数据时,RemoteMediator
可以触发以获取更多项目,然后从缓存中查询现有项目,修改它们并插入新项目,然后使其无效,PagingSource
以便它知道新的更改。
失效是目前在转换之外更新现有数据的唯一方法。我们想添加新的操作符,但还没有像fold
/ reduce
/deduplicate
这样适合这个用例的东西。
推荐阅读
- python - “模块”对象没有属性“lru_cache”
- vba - MS Access 需要遍历 10k csv 文件,但 MS Access 数据库填满过快
- cookies - 在 oAuth dance 生成的 cookie 中使用 userId 作为我的应用程序用户的 Id
- php - 通过 Scoop 安装 Composer 时,SSL/TLS 需要 openssl 扩展
- python - Python - 使用存储的字符串选择全部
- r - 如何使用 VS Code 调试 R-Shiny 代码
- kotlin - 在类中测试 Kotlin 扩展
- react-admin - NumberField 文本自 react-admin 2.1.3 起对齐
- python - 3D 点的平滑 Mayavi 可视化
- php - 如何防止 php 会话得到错误的值?