在我的应用程序中,我想使用Viewmodel和LiveData,为此我使用了以下教程:带有LiveData的ViewModel
但我有一个问题,为什么要使用LiveData,如下面所示:
private val _flavor = MutableLiveData<String>("")
val flavor: LiveData<String> = _flavor
fun setFlavor(desiredFlavor: String) {
_flavor.value = desiredFlavor
}
为什么不使用下面的形式?
val flavor = MutableLiveData<String>()
fun setFlavor(desiredFlavor: String) {
flavor.value = desiredFlavor
}
请告诉我更多关于这方面的信息。
2条答案
按热度按时间vaj7vani1#
为什么不使用下面的形式?
简而言之,它违反了封装。
假设
setFlavor
更复杂:您总是希望尝试更新风味的任何内容都经过
setFlavor
。但是对于一个暴露的MutableLiveData
对象,任何人都可以改变它的风格并绕过您的检查。通过保持该值为私有并且只公开只读变量,可以控制如何更新该值。
vc9ivgsu2#
MutableLiveData类公开了setValue()和postValue()方法。这意味着可以更改
value
属性。另一方面,LiveData类也包含这两个方法,但都设置为protected
。这意味着该值无法更改。为什么有必要用途:
在ViewModel类中?这是因为ViewModel类是存储库类和视图之间的桥梁,在存储库类中,您实际上从API获取数据。所以这是唯一一个你应该改变值的地方。一旦分配了一个值,就将MutableLiveData对象保存到LiveData中,并公开它,以便从Activity或片段中观察到它。