kotlin 如何在Android中使用LiveData到ViewModel

14ifxucb  于 2023-05-01  发布在  Kotlin
关注(0)|答案(2)|浏览(238)

在我的应用程序中,我想使用ViewmodelLiveData,为此我使用了以下教程:带有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
}

请告诉我更多关于这方面的信息。

vaj7vani

vaj7vani1#

为什么不使用下面的形式?

val flavor = MutableLiveData<String>()

fun setFlavor(desiredFlavor: String) {
    flavor.value = desiredFlavor
}

简而言之,它违反了封装。

假设setFlavor更复杂:

fun setFlavor(desiredFlavor: String) {
    flavor.value = complextLogicToValidateAndTransform(desiredFlavor)
}

您总是希望尝试更新风味的任何内容都经过setFlavor。但是对于一个暴露的MutableLiveData对象,任何人都可以改变它的风格并绕过您的检查。

viewModel.flavor.setValue(unvalidatedAndUntransformedFlavorThatWillCauseHavok)

通过保持该值为私有并且只公开只读变量,可以控制如何更新该值。

vc9ivgsu

vc9ivgsu2#

MutableLiveData类公开了setValue()和postValue()方法。这意味着可以更改value属性。另一方面,LiveData类也包含这两个方法,但都设置为protected。这意味着该值无法更改。
为什么有必要用途:

private val _flavor = MutableLiveData<String>("")
val flavor: LiveData<String> = _flavor

在ViewModel类中?这是因为ViewModel类是存储库类和视图之间的桥梁,在存储库类中,您实际上从API获取数据。所以这是唯一一个你应该改变值的地方。一旦分配了一个值,就将MutableLiveData对象保存到LiveData中,并公开它,以便从Activity或片段中观察到它。

相关问题