【发布时间】:2020-09-17 11:52:38
【问题描述】:
我对使用 Repository 的 MVVM 模式有疑问。
我有一个包含 2 个片段的活动。我们称他们为
FragmentA和FragmentB。这 2 个片段有自己的 viewModel,例如
viewModelA和viewModelB。我还有一个只提供本地数据的存储库类。没有网络请求。只是一个 MutableList。
FragmentA和FragmentB通过 LiveData 观察各自的 viewModel。
//FragmentA Observes viewModelA
viewModelA.cartContent.observe(viewLifecycleOwner, Observer { content ->
})
// ViewModelA exposes cartContent
val cartContent: LiveData<MutableList<Item>> = repository.getContent()
// Repository
private val contentRepository = mutableListOf<Item>()
fun getContent() : LiveData<MutableList<Item>> {
val data = MutableLiveData<MutableList<Item>>()
data.value = contentRepository
return data
}
.
.
.
现在,两个视图模型都在对保存 MutableList 的存储库进行更改。我想知道是否可以观察另一个 viewModel 对存储库所做的更改。如果有,怎么做?
为了更清楚,我希望viewModelA 知道viewModelB 何时修改存储库中的列表。 viewModelA 可以观察存储库中的数据,以便当viewModelB 修改它时,它也会传播到viewModelA 吗?
我宁愿不使用共享视图模型。我也更愿意通过观察 LiveData 而不是使用接口来解决它
谢谢
【问题讨论】:
-
Fragment B是否在FragmentA打开时打开? -
FragmentA始终处于打开状态。FragmentB可能会或可能不会打开。但是,如果FragmentB打开了,FragmentA肯定也打开了。 -
你不能从两个视图模型中观察存储库 LiveData 吗?
-
这正是我要问的:) 要观察我需要
viewLifecycleOwner而视图模型没有它。 -
Transformations.switchMap是您正在寻找的。读一读吧。
标签: android kotlin android-livedata android-mvvm mutablelivedata