从另一个LiveData <List>生成LiveData <List>

问题描述

使用Transformations.switchMap可以从源实时数据生成一个新的LiveData对象。每当源触发其观察者时,它也会触发重新映射。

将源视为LiveData<List<User>>,是Room @Dao的{​​{1}}上@Database的结果。

  1. 列表结构发生变化(例如在数据库中插入)或
  2. 列表结构未更改,但列表中的对象已更改 (例如,更新数据库

一个人如何有效地@Entity User将源代码转换为另一个switchMapLiveData<List<UserMod>>是由UserMod制成的某种通用对象)例如

User

不好做

  • 在情况1中,即使除少数插入/删除操作外,大多数列表都相同,但仍会生成一个完整的新列表
  • 在情况2中,即使只有一些基础的Transformations.switchMap(allUsers,list -> { List<UserMod> res=new ArrayList<>(); list.forEach(user-> res.add(new UserMod(user))); return new mutablelivedata<>(res); } ); 发生了变化,所有其他User也在重新生成

目的是与UserMod s的源列表相对应,维护User s的列表。如果UserMod得到更新,(在此示例中)将创建一个新的对应的User

如何解决这些问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)