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

问题描述 投票:0回答:1

我对带有存储库的MVVM模式有疑问。

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

  • 这2个片段都有自己的viewModel,例如viewModelAviewModelB

  • 我也有一个仅提供本地数据的存储库类。没有网络请求。只是一个MutableList。

  • [FragmentAFragmentB通过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
}
.
.
.

现在,两个viewModel都在保留MutableList的存储库中进行更改。我想知道是否有可能观察到其他viewModel完成的存储库中的更改。如果是这样,如何?

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

我宁愿不使用共享的viewModel。我也希望通过观察LiveData而不是使用接口来解决它]]

谢谢

我对带有存储库的MVVM模式有疑问。我有一个托管2个片段的活动。我们称它们为FragmentA和FragmentB。这两个片段具有自己的viewModel,例如...

android kotlin android-livedata android-mvvm mutablelivedata
1个回答
1
投票
// 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))
}
© www.soinside.com 2019 - 2024. All rights reserved.