美文网首页
LiveData使用笔记

LiveData使用笔记

作者: 紫鹰 | 来源:发表于2021-04-19 15:04 被阅读0次

是什么

是一种可观察的数据存储器类。

特点

1、数据保持更新
2、具有生命周期感知能力(如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。LiveData 只会将更新通知给活跃的观察者。为观察 LiveData 对象而注册的非活跃观察者不会收到更改通知。)

使用

1.通常在ViewModel中创建(防止activity、fragment臃肿;达到分离关注点目的)

2.创建

val currentName: MutableLiveData<String> by lazy {
    MutableLiveData<String>()
}

3.观察(绑定)

   // Create the observer which updates the UI.
    val nameObserver = Observer<String> { newName ->
        // Update the UI, in this case, a TextView.
        nameTextView.text = newName
    }

    // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
    model.currentName.observe(this, nameObserver)

4.数据变化

val anotherName = "John Doe"
currentName.setValue(anotherName)

调用 setValue() 或 postValue() 都会触发观察者并更新界面。

扩展使用

1.扩展

class StockLiveData(symbol: String) : LiveData<BigDecimal>() {
  private val stockManager = StockManager(symbol)

  private val listener = { price: BigDecimal ->
    value = price
  }

  override fun onActive() {
    stockManager.requestPriceUpdates(listener)
  }

  override fun onInactive() {
    stockManager.removeUpdates(listener)
  }
}

2.转换

val userLiveData: LiveData<User> = UserLiveData()
val userName: LiveData<String> = Transformations.map(userLiveData){
    user -> "${user.name} ${user.lastName}"
}

3.合并多个数据源
MediatorLiveData 是 LiveData 的子类,允许您合并多个 LiveData 源。只要任何原始的 LiveData 源对象发生更改,就会触发 MediatorLiveData 对象的观察者。

LiveData liveData1 = ...;
LiveData liveData2 = ...;

MediatorLiveData liveDataMerger = new MediatorLiveData<>();
liveDataMerger.addSource(liveData1, value ->        liveDataMerger.setValue(value));
liveDataMerger.addSource(liveData2, value -> liveDataMerger.setValue(value));

4.将协程与 LiveData 一起使用

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

相关文章

网友评论

      本文标题:LiveData使用笔记

      本文链接:https://www.haomeiwen.com/subject/yqjnlltx.html