【问题标题】:LiveData from database not trigger Transformations.switchMap来自数据库的 LiveData 不会触发 Transformations.switchMap
【发布时间】:2020-03-02 19:39:43
【问题描述】:

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

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 吗?
提前致谢

【问题讨论】:

  • 你需要用活跃的观察者观察mAppList
  • @EpicPandaForce。我已经在活动中观察到 mAppList。 model.mAppList.observer(activity, overver)

标签: android android-room android-livedata


【解决方案1】:

为了在表格中插入新行时触发 mAppList,您必须观察整个表格内容,例如:

道:

@Query("SELECT * FROM pkg") fun getAllInfos(): LiveData<List<Info>>

视图模型:

val allInfos = appDAO.getAllInfos() val mAppList = Transformations.switchMap(allInfos, { infos -> ... })

如果表格内容发生变化(添加/删除或修改新行),mAppList 将始终被触发

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多