android - 如何从两种不同的方式(房间、用户)处理 Android LiveData 更改?
问题描述
我有一个使用 REST API 的带有 Room 数据库的 Android 应用程序。Room 充当单一事实来源,即当 API 结果保存在 Room 中时,我正在更新 UI。
在我的一个屏幕中,我需要显示一个过滤列表(包含来自 API 的最新更新),例如,按作者过滤的电影列表。
当用户更改作者过滤器时,列表需要更新,而且当电影在后端由于 API 调用(存储在数据库中)发生变化时,也需要更新列表。
其次,我可以使用从 Room 调用创建的 LiveData> 对象来实现,它将调度来自 Room db 的更改。
但是,如何将用户激活的更改(通过切换过滤器)合并到同一源(过滤的电影列表)?
解决方案
对于其他人来说,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
}
推荐阅读
- c# - 在 Razor 页面中使用 @functions 块的错误和警告
- java - 如何制作一个所有派生类一起只能实例化一个实例的单例抽象基类?(爪哇)
- java - 无法将类型“java.lang.String”的值转换为所需类型“java.time.LocalDate”
- c# - 将 HttpWebRequest 与 XML post 一起使用时如何添加 Bearer 和 Scope
- javascript - 在 Vue 组件中,如何将元素的名称作为参数传递给元素调用的函数?
- java - 让第二个 okHTTP 请求等待第一个完成 Android
- python - 如何将函数(使用多个包)组织到一个文件中
- twitter-bootstrap - 如何修复移动网站的布局?
- r - 给定一个潜在指标,我如何有条件地求和?
- javascript - 用于识别一周中的多天的 Javascript 脚本