Android MVVM 2 ViewModels 与 LiveData 共享 1 个存储库
Android MVVM 2 ViewModels Sharing 1 Repository with LiveData
我对存储库的 MVVM 模式有疑问。
我有一个 activity 托管 2 个片段。我们称它们为 FragmentA
和 FragmentB
.
这 2 个片段有自己的视图模型,如 viewModelA
和 viewModelB
。
我还有一个仅提供本地数据的存储库 class。无网络请求。只是一个 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
}
.
.
.
现在,两个 viewModel 都在对保留 MutableList 的存储库进行更改。我想知道是否可以观察另一个 viewModel 对存储库所做的更改。如果是,怎么做?
为了更清楚,我希望 viewModelA
知道 viewModelB
何时修改存储库中的列表。 viewModelA
可以观察存储库中的数据,以便当 viewModelB
修改它时,它也会传播到 viewModelA
吗?
我不想使用共享的 viewModel。我也更愿意通过观察 LiveData 而不是使用 interfaces
来解决它
谢谢
// 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 ->
}
我对存储库的 MVVM 模式有疑问。
我有一个 activity 托管 2 个片段。我们称它们为
FragmentA
和FragmentB
.这 2 个片段有自己的视图模型,如
viewModelA
和viewModelB
。我还有一个仅提供本地数据的存储库 class。无网络请求。只是一个 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
}
.
.
.
现在,两个 viewModel 都在对保留 MutableList 的存储库进行更改。我想知道是否可以观察另一个 viewModel 对存储库所做的更改。如果是,怎么做?
为了更清楚,我希望 viewModelA
知道 viewModelB
何时修改存储库中的列表。 viewModelA
可以观察存储库中的数据,以便当 viewModelB
修改它时,它也会传播到 viewModelA
吗?
我不想使用共享的 viewModel。我也更愿意通过观察 LiveData 而不是使用 interfaces
来解决它谢谢
// 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 ->
}