最近,我开始将我的应用程序合并到LiveData和Room中。
在android开发人员中检查文档之后:
将在mAppPkgList更改时触发。
当我将新记录插入数据库时,Transformations.switchMap mAppPkgList发生了更改,但mAppPkgList并没有触发。
这就是实现。
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吗?
提前感谢
发布于 2020-03-02 11:39:43
为了在插入新行时触发mAppList,您必须观察整个表内容,如下所示:
Dao:
@Query("SELECT * FROM pkg") fun getAllInfos(): LiveData<List<Info>>
ViewModel:
val allInfos = appDAO.getAllInfos() val mAppList = Transformations.switchMap(allInfos, { infos -> ... })
这样,如果表内容发生更改(添加/删除或修改新行),mAppList将始终被触发。
https://stackoverflow.com/questions/60408352
复制相似问题