如何处理来自两种不同方式(房间、用户)的 Android LiveData 变化?
How to handle Android LiveData changes from two different ways (Room, user)?
我有一个 Android 应用程序,它的 Room 数据库使用 REST API。
Room 充当单一事实来源,即当 API 结果保存在 Room 中时,我正在更新 UI。
在我的一个屏幕中,我需要显示一个过滤列表(包含来自 API 的最新更新),例如,按作者过滤的电影列表。
当用户更改作者过滤器时,列表需要更新,而且,由于 API 调用(存储在数据库中),当后端的电影发生变化时,列表也需要更新).
其次,我可以使用从 Room 调用创建的 LiveData> 对象实现,它将从 Room 数据库调度更改。
但是,我如何将用户激活的更改(通过切换过滤器)合并到同一来源(过滤后的电影列表)?
对于其他人来说,使用 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
}
我有一个 Android 应用程序,它的 Room 数据库使用 REST API。 Room 充当单一事实来源,即当 API 结果保存在 Room 中时,我正在更新 UI。
在我的一个屏幕中,我需要显示一个过滤列表(包含来自 API 的最新更新),例如,按作者过滤的电影列表。
当用户更改作者过滤器时,列表需要更新,而且,由于 API 调用(存储在数据库中),当后端的电影发生变化时,列表也需要更新).
其次,我可以使用从 Room 调用创建的 LiveData> 对象实现,它将从 Room 数据库调度更改。
但是,我如何将用户激活的更改(通过切换过滤器)合并到同一来源(过滤后的电影列表)?
对于其他人来说,使用 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
}