在我的应用程序中,我想使用ViewmodelLiveData,为此我使用了以下教程:ViewModel with LiveData

但我有一个问题,为什么要这样使用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
}

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

推荐答案

为什么不与下面的表格一起使用?

val flavor = MutableLiveData<String>()

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

In short, it violates encapsulation.

假设setFlavor更复杂:

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

你总是想要任何试图更新口味到setFlavor级的东西.但有了expose 的MutableLiveData对象,任何人都可以改变口味,绕过您的判断.

viewModel.flavor.setValue(unvalidatedAndUntransformedFlavorThatWillCauseHavok)

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

Android相关问答推荐

三星上的某些应用程序已禁用通知权限切换

如何让用户与我的应用生成的多个音频文件交互

Android:微调:在代码中设置ArrayAdapter不希望调用On ItemSelected,仅当用户单击微调时调用

如何从LazyColumn中的图标异步获取可绘制的加载?

为什么它显示我的空白屏幕?

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

将输出写入已发布的 Android 应用程序中的日志(log)文件?

Android 访问任意公共目录

为什么我收到这个错误我需要安装 android studio

setContentView() 方法的签名

设置背景图片组成Column

在 Kotlin 中设置 startActivity() 时类型不匹配

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

Jetpack Compose 动画性能问题

如何使用 Jetpack Compose 在图像上叠加文本

android xml底部空间大

协程是否在 if 条件下保持秩序?

Kotlin:如何在另一个变量的名称中插入一个变量的值

Android全屏AlertDialog

在delphi中将Jnet_uri转换为Tbitmap