首页 > 解决方案 > 如何从两种不同的方式(房间、用户)处理 Android LiveData 更改?

问题描述

我有一个使用 REST API 的带有 Room 数据库的 Android 应用程序。Room 充当单一事实来源,即当 API 结果保存在 Room 中时,我正在更新 UI。

在我的一个屏幕中,我需要显示一个过滤列表(包含来自 API 的最新更新),例如,按作者过滤的电影列表。

当用户更改作者过滤器时,列表需要更新,而且当电影在后端由于 API 调用(存储在数据库中)发生变化时,也需要更新列表。

其次,我可以使用从 Room 调用创建的 LiveData> 对象来实现,它将调度来自 Room db 的更改。

但是,如何将用户激活的更改(通过切换过滤器)合并到同一源(过滤的电影列表)?

标签: androidandroid-roomandroid-livedata

解决方案


对于其他人来说,MediatorLiveData 实际上非常简单。

val selectedItem = MediatorLiveData<Voyage>() 

var voyages: LiveData<Resource<List<Voyage>>>

var voyageFilter = MutableLiveData<VoyageFilter>()

selectedItem.addSource(voyageFilter) { filter -> 
//do something   
 }

selectedItem.addSource(voyages) { listResource ->
        //do something

}

推荐阅读