来自数据库的 LiveData 未触发 Transformations.switchMap

LiveData from database not trigger Transformations.switchMap

最近,我开始将我的应用合并到 LiveData 和 Room 中。
查看android中的文档后开发者:

Transformations.switchMap

将在 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 将始终被触发