首页 > 解决方案 > 为什么在使用 LiveData 时要在 ViewModel 类中双重声明变量?

问题描述

现在我正在关注一个教程,我正在开发一个简单的游戏应用程序,试图理解和使用 MVVM 应用程序架构。在我的 ViewModel 类中,我有一个包含玩家得分的字段。

score 变量声明如下:

private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
    get() = _score

现在,在我的 UI Controller 类中,我观察到这样的分数:

viewModel.score.observe(this, Observer { newScore ->
        binding.scoreText.text = newScore.toString()
    })

所以,我的问题是为什么我需要第二个分数声明?我不能只有一个

val score = MutableLiveData<Int>()

并像上面一样观察它?我试过了,它有效。

标签: androidkotlinmvvm

解决方案


它会起作用的。这样做的目的是确保对该变量的更改仅发生在一个地方,即您的 ViewModel。这只是人们遵循的一种模式,使您更容易调试并确保您的应用程序/视图的状态是正确的。我在这里找到了来自 Google 的一个来源,尽管我确信还有更多


推荐阅读