【发布时间】:2021-07-19 08:55:19
【问题描述】:
在我的片段中
lifecycleScope.launch {
viewModel.capture().collectLatest {
adapter.submitData(it)
}
}
现在当我更新 Recyclerview 中的项目时。
repository.update(bean)
db.withTransaction {
db.dao().update(bean)
service.update(requestBody)
}
因为我将 paging3 与 remoteMediator 一起使用,例如: 在道:
@Query("SELECT * FROM content ORDER BY ... ")
fun getAll(): PagingSource<Int,Content>
在视图模型中:
fun capture() = repository.captureYiMaFlow()
在存储库中:
fun capture()=
Pager(
config = PagingConfig(pageSize = 6),
remoteMediator = SettingMediator(service, db)) {
db.dao().getAll()
}.flow
房间会自动更改recyclerview中的物品数据。因此数据库中的数据将被更新。
因为我打电话给service.update(requestBody),所以服务器中的数据会被更新。
但是recyclerview的UI没有改变。我需要关闭fragment再打开,然后UI会改变。(注意recyclerview的数据已经改变。例如:recyclerview的第一项数据是100,我更新为1000 ,然后当我点击项目时,数据是1000,但是UI数据没有改变,它是100...
虽然我可以使用adapter.notifyDataSetChange()来更新UI,但我认为还有其他一些方法可以完成它
【问题讨论】:
-
提供了尽可能多的数据,并假设您实现了文档中提到的
Remote Mediator,它看起来确实不错,尤其是我缺少的collectLatest运算符,并在这里给我带来了问题: stackoverflow.com/questions/67495592/…。通过查看这些信息,我真的想不出任何可能的解决方案,也许在您的项目中添加一个 github 链接? -
@mehulbisht 这个问题我已经解决了......但我还有另一个问题......
-
那么这次的问题是什么? :)
-
我把它放在答案上:如果我改变两行代码的顺序,结果是不同的。
adapter.submitData(it) adapter.notifyDataSetChanged() -
好吧,你能展示一下
submitData的实际作用吗?是DIffUtils的方法还是你自己创建的自定义方法?
标签: android kotlin android-room android-jetpack android-paging