Android MVVM 2 ViewModels 与 LiveData 共享 1 个存储库



我有一个关于存储库的MVVM模式的问题。

  • 我有一个托管 2 个片段的活动。让我们称它们为FragmentAFragmentB.

  • 这两个片段有自己的视图模型,如viewModelAviewModelB

  • 我还有一个仅提供本地数据的存储库类。无网络请求。只是一个可变列表。

  • FragmentAFragmentB通过实时数据观察各自的视图模型。

//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
}
.
.
.

现在,两个 viewModel 都在保留 MutableList 的存储库上进行更改。我想知道是否可以观察由其他视图模型完成的存储库上的更改。如果是这样,如何?

为了更清楚,我希望viewModelA知道viewModelB何时修改存储库中的列表。viewModelA是否可以观察存储库中的数据,以便在viewModelB修改数据时,它也传播到viewModelA

我宁愿不使用共享视图模型。我也更愿意通过观察LiveData而不是使用接口来解决它

。谢谢

// Repository
private val contentRepository = MutableLiveData<List<Item>>(Collections.emptyList())
fun getContent() : LiveData<List<Item>> = contentRepository
fun addContent(item: Item) {
val list = ArrayList(contentRepository.value!!)
list.add(item)
contentRepository.value = Collections.unmodifiableList(list)
}
fun setContent(items: List<Item>) {
contentRepository.value = Collections.unmodifiableList(ArrayList(items))
}

val cartContent: LiveData<List<Item>> = repository.getContent()

import androidx.lifecycle.observe
//FragmentA Observes viewModelA
viewModelA.cartContent.observe(viewLifecycleOwner) { content ->
}

相关内容

  • 没有找到相关文章

最新更新