我正在通过 udacity 关注 google android 项目“猜猜看”,他们在其中引入了 livedata 和 mutablelivedata。我们已经到了创建一个与 mutablelivedata 对象等效的 livedata 并为 mutablelivedata 实例的 livedata 创建一个 get() 支持属性的地步。我们使用 mutablelivedata 实例对 viewModel 中的数据进行所有更改。我们的 UI 片段在 viewModel 的 livedata 对象上设置观察者,而不是 mutablelivedata 对象。
尽管观察者在 livedata 实例而不是 mutablelivedata 实例上,但当 mutablelivedata 对象更新时,将触发 livedata 观察者代码。我喜欢它像这样工作,但我不完全理解它是如何工作的。谁能给我解释一下?
在视图模型中
val _word = MutableLiveData<String>()
val word : LiveData<String>
get() = _word
在 ViewModel 中编辑
private fun nextWord() {
//Select and remove a word from the list
if (wordList.isEmpty()) {
//gameFinished()
} else {
_word.value = wordList.removeAt(0)
}
}
在 UI 片段中
viewModel.word.observe(this, Observer{newWord ->
binding.wordText.text = newWord
})