fun updateTaps() {
tapCount++
_taps.postValue("$tapCount taps")
}
}
- 观察
LiveData
对象
// HomeFragment.kt
private val viewModel: HomeViewModel by viewModels()
// 观察Observer
viewModel.taps.observe(viewLifecycleOwner, ::tapsUpdate)
private fun tapsUpdate(s: String?) {
binding.tvCount.text = s ?: “”
}
- 更新
LiveData
对象
MutableLiveData
类将公开setValue(T)
和postValue(T)
方法,
// 触发
binding.btnAdd.setOnClickListener {
viewModel.updateTaps()
}
复制代码
扩展LiveData
- 继承
LiveData
,自定义LiveData
实现扩展功能,重写onActive()
和onInactive()
方法
-
当
LiveData
对象具有活跃观察者时,会调用onActive()
方法 -
当
LiveData
对象没有任何活跃观察者时,会调用onInactive()
-
setValue(T)
方法将更新LiveData
实例的值,并将更改告知活跃观察者。
// 官方代码
class StockLiveData(symbol: String) : LiveData() {
private val stockManager: StockManager = StockManager(symbol)
private val listener = { price: BigDecimal ->
value = price
}
override fun onActive() {
stockManager.requestP