01LiveData基础之基本用法附带demo
02Lifecycle-LiveData基础之livedata扩展附带demo
03Lifecycle-LiveData基础之map使用附带demo
04Lifecycle-LiveData基础之配合room 或者配合协程使用附带demo
本篇两个内容 简介
1.Transformations 中 map() 和 switch() 方法
2.MediatorLiveData 的使用
map() switchMap()区别和使用
Livedata 附带Transformations 类 提供了转换功能 例如网络数据回传后的类型转换
[Transformations.map()
](https://developer.android.google.cn/reference/androidx/lifecycle/Transformations?hl=zh_cn#map(android.arch.lifecycle.LiveData, android.arch.core.util.Function))
[Transformations.switchMap()
](https://developer.android.google.cn/reference/androidx/lifecycle/Transformations?hl=zh_cn#switchMap(android.arch.lifecycle.LiveData, android.arch.core.util.Function>))
使用与区别
//Transformations.map()
//被监听数据
private val count = MutableLiveData<Int>(1)
//监听 count 如果它变动 则会触发监听 并赋值给 mapCount
private val mapCount: LiveData<Int> = Transformations.map()(count) {
//返回一个值就可以
it + 1
}
//监听 count 如果它变动 则会触发监听 并赋值给 switchMapCount
//与map()的区别是必须返回一个 MutableLiveData 对象
private val switchMapCount: LiveData<Int> = Transformations.switchMap(mapCount) {
MutableLiveData<Int>(it!! + 1)
}
MediatorLiveData的使用
//可以监听多个值
private val mediatorLiveData = MediatorLiveData<String>()
//使用
mediatorLiveData.addSource(mapCount) (
val s = "mapCount$it"
Log.e("MainActivity:mapCount--", s)
// mediatorLiveData.postValue(s)
}
mediatorLiveData.addSource(switchMapCount) {
val s = "switchMapCount$it"
Log.e("MainActivity:switchMapCount--", s)
// mediatorLiveData.postValue(s)
}
注意点:
1.mapCount 和switchMapCount 值的变动 会触发各自addSource监听的回调
2.addSource 不会赋值给mediatorLiveData 需要手动调用 setValue方法
最后 推荐看下 大佬文章 我翻译了一下 连接
本章代码demo03