mis*_*180 3 android android-livedata mutablelivedata
我正在通过 udacity 关注 google android 项目“猜猜它”,他们介绍了 livedata 和 mutablelivedata。我们已经创建了一个与可变实时数据对象等效的实时数据,并为可变实时数据实例的实时数据创建了 get() 支持属性。我们使用 mutablelivedata 实例对 viewModel 中的数据进行所有更改。我们的 UI 片段在 viewModel 的 livedata 对象上设置观察者,而不是可变的 livedata 对象。
尽管观察者位于 livedata 实例而不是 mutablelivedata 实例上,但当更新 mutablelivedata 对象时,会触发 livedata 观察者代码。我喜欢它的工作原理,但我不太明白它是如何工作的。谁能向我解释一下吗?
在视图模型中
val _word = MutableLiveData<String>()
val word : LiveData<String>
get() = _word
Run Code Online (Sandbox Code Playgroud)
在 ViewModel 中编辑
private fun nextWord() {
//Select and remove a word from the list
if (wordList.isEmpty()) {
//gameFinished()
} else {
_word.value = wordList.removeAt(0)
}
}
Run Code Online (Sandbox Code Playgroud)
在 UI 片段中
viewModel.word.observe(this, Observer{newWord ->
binding.wordText.text = newWord
})
Run Code Online (Sandbox Code Playgroud)
我们的 UI 片段在 viewModel 的 livedata 对象上设置观察者,而不是可变的 livedata 对象。
这是同一个对象。_word并且word都指向MutableLiveData. 但是,从数据类型的角度来看,word被定义为LiveData,以隐藏片段的实现细节。
因此,观察者被放置在获取值更新的同一对象上。
就我个人而言,我更喜欢将此代码编写为:
private val _word = MutableLiveData<String>()
val word : LiveData<String> = _word
Run Code Online (Sandbox Code Playgroud)
...恕我直言,它更容易阅读并且具有相同的效果。
| 归档时间: |
|
| 查看次数: |
2415 次 |
| 最近记录: |