首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库中的LiveData不触发Transformations.switchMap

数据库中的LiveData不触发Transformations.switchMap
EN

Stack Overflow用户
提问于 2020-02-26 06:57:41
回答 1查看 305关注 0票数 0

最近,我开始将我的应用程序合并到LiveData和Room中。

在android开发人员中检查文档之后:

Transformations.switchMap

将在mAppPkgList更改时触发。

当我将新记录插入数据库时,Transformations.switchMap mAppPkgList发生了更改,但mAppPkgList并没有触发。

这就是实现。

代码语言:javascript
复制
    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中的代码。

代码语言:javascript
复制
@DAO
@Query("SELECT * from pkg WHERE id=:id")
    LiveData<List<Info>> getInfo(int id);

..。

当我在数据库中插入新记录时,你能帮我触发Transformations.switchMap吗?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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将始终被触发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60408352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档