LiveData 封装在 Android Studio 和 Kotlin 中是如何工作的?
How LiveData encapsulation works in AndroidStudio and Kotlin?
我正在做一个项目,我有 ViewModel 并使用封装的 LiveData。
private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
get() = _counter
在 activity 一侧,我观察来自 ViewModel 的计数器。
viewModel.counter.observe(this, Observer {
binding.clickCounterText.text = it.toString()
})
在 ViewModel 中,我只使用 _counter,但计数器观察者知道 _counter 已更改?
怎么运行的? _counter改变时counter如何改变?
有人能给我解释一下吗?
谢谢
counter
是 _counter
的向上转换,因为 _counter
是 MutableLiveData
而 MutableLiveData
是 LiveData
的子类。当 Activity 调用 counter
它实际上得到了 _counter
的引用,所以当 Activity 观察 counter
它实际上观察 _counter
.
In ViewModel I only work with _counter, but counter observer knows that _counter have been changed? HOW IT WORKS? How is counter changed when _counter is changed?
_counter
用 MutableLiveData<Int>()
初始化,而 counter
是 引用 到 _counter
的实例。两者都是引用到同一个实例,两者之间的唯一区别是counter
是LiveData类型而_counter
是 MutableLiveData。由于 reference/instance 相同,任何更改都会触发 两者。
我正在做一个项目,我有 ViewModel 并使用封装的 LiveData。
private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
get() = _counter
在 activity 一侧,我观察来自 ViewModel 的计数器。
viewModel.counter.observe(this, Observer {
binding.clickCounterText.text = it.toString()
})
在 ViewModel 中,我只使用 _counter,但计数器观察者知道 _counter 已更改? 怎么运行的? _counter改变时counter如何改变?
有人能给我解释一下吗? 谢谢
counter
是 _counter
的向上转换,因为 _counter
是 MutableLiveData
而 MutableLiveData
是 LiveData
的子类。当 Activity 调用 counter
它实际上得到了 _counter
的引用,所以当 Activity 观察 counter
它实际上观察 _counter
.
In ViewModel I only work with _counter, but counter observer knows that _counter have been changed? HOW IT WORKS? How is counter changed when _counter is changed?
_counter
用 MutableLiveData<Int>()
初始化,而 counter
是 引用 到 _counter
的实例。两者都是引用到同一个实例,两者之间的唯一区别是counter
是LiveData类型而_counter
是 MutableLiveData。由于 reference/instance 相同,任何更改都会触发 两者。