来自数据库的 LiveData 未触发 Transformations.switchMap
LiveData from database not trigger Transformations.switchMap
最近,我开始将我的应用合并到 LiveData 和 Room 中。
查看android中的文档后开发者:
将在 mAppPkgList 更改时触发。
当我将新记录插入数据库时 mAppPkgList变了,但是Transformations.switchMap没有触发。
这是实现。
ViewModel class
public LiveData<List<Info>> mAppPkgList = new MutableLiveData<>(null);
public LiveData<List<Info>> mAppList = Transformations.switchMap(mAppPkgList, list->{
SLog.v(TAG,"Transformations.switchMap");
List<Info> retArr = new ArrayList<>();
//custom logic
MutableLiveData<List<Info>> ret = new MutableLiveData<>();
ret.setValue(retArr);
return ret;
});
...
mAppPkgList = appDAO.getInfo(id)
这是 DAO 中的代码。
@DAO
@Query("SELECT * from pkg WHERE id=:id")
LiveData<List<Info>> getInfo(int id);
...
每当我向数据库中插入新记录时,你能帮我触发 Transformations.switchMap 吗?
提前致谢
为了在新行插入 table 时触发 mAppList,您必须观察整个 table 内容,例如:
道:
@Query("SELECT * FROM pkg")
fun getAllInfos(): LiveData<List<Info>>
视图模型:
val allInfos = appDAO.getAllInfos()
val mAppList = Transformations.switchMap(allInfos, { infos -> ... })
如果 table 内容发生变化(新行 added/removed 或修改),mAppList 将始终被触发
最近,我开始将我的应用合并到 LiveData 和 Room 中。
查看android中的文档后开发者:
将在 mAppPkgList 更改时触发。
当我将新记录插入数据库时 mAppPkgList变了,但是Transformations.switchMap没有触发。
这是实现。
ViewModel class
public LiveData<List<Info>> mAppPkgList = new MutableLiveData<>(null);
public LiveData<List<Info>> mAppList = Transformations.switchMap(mAppPkgList, list->{
SLog.v(TAG,"Transformations.switchMap");
List<Info> retArr = new ArrayList<>();
//custom logic
MutableLiveData<List<Info>> ret = new MutableLiveData<>();
ret.setValue(retArr);
return ret;
});
...
mAppPkgList = appDAO.getInfo(id)
这是 DAO 中的代码。
@DAO
@Query("SELECT * from pkg WHERE id=:id")
LiveData<List<Info>> getInfo(int id);
...
每当我向数据库中插入新记录时,你能帮我触发 Transformations.switchMap 吗?
提前致谢
为了在新行插入 table 时触发 mAppList,您必须观察整个 table 内容,例如:
道:
@Query("SELECT * FROM pkg")
fun getAllInfos(): LiveData<List<Info>>
视图模型:
val allInfos = appDAO.getAllInfos()
val mAppList = Transformations.switchMap(allInfos, { infos -> ... })
如果 table 内容发生变化(新行 added/removed 或修改),mAppList 将始终被触发