1. 添加相应的库:
直接从官网摘过来https://developer.android.com/topic/libraries/architecture/adding-components.html
a、项目的build.gradle:
b、app 或者module 的build.gradle:
上面这些包含了Lifecycles、LiveData、ViewModel、Room、Paging
如果使用的是java 8 需要用android.arch.lifecycle:common-java8:1.1.0替代android.arch.lifecycle:compiler
2. 简单使用:
创建一个MutableLiveData对象,因为LiveData是抽象类不能直接创建对象,MutableLiveData是LiveData一个非常基本的继承类。
创建一个观察监听器
把观察监听器和被观察者MutableLiveData的对象绑定起来
给被观察者MutableLiveData的对象设置值,值改变了,就会回调上面的观察监听器
3. Transformations.map (转换)的使用
一个LiveData子类对象,监听另一个LiveData子类对象值的变化,然后用一个函数对被监听的LiveData子类对象的变化的值进行加工,然后设置给监听的LiveData子类对象。
创建被监听的LiveData子类对象
创建监听的LiveData子类对象
上面是把被监听的LiveData子类对象( liveData1)的变化的整型数值 转换成一段字符串,然后设置给 liveData2
创建一个 liveData2 观察监听器
把 liveData2 观察监听器和 liveData2 绑定起来
给 liveData1设置值,值改变了,就会回调上面的 liveData2 观察监听器
Transformations.map 涉及到 2 个LiveData 子类对象。
4. Transformations.switchMap 的使用
Transformations.switchMap 与 Transformations.map 基本差不多,只是 Transformations.switchMap 的转换函数是再返回一个 LiveData 子类的对象,所以Transformations.switchMap 涉及到 3 个LiveData 子类对象。
创建被监听的LiveData子类对象
创建监听的LiveData子类对象
创建一个 监听的LiveData子类对象 观察监听器
把观察监听器和 监听的LiveData子类对象 绑定起来
给 被观察者MutableLiveData的对象 设置值,值改变了,就会回调上面的观察监听器
Transformations.switchMap 可以用于http请求场景:
每次http请求都会创建一个 LiveData 对象,但是UI层的不希望每次都去对之前LiveData 对象解绑,再绑定新的LiveData 对象,这时就可以使用Transformations.switchMap,UI层只要一直绑定一个LiveData 对象(如上面的liveData3),不直接绑定 http请求每次创建的 LiveData 对象 (如上面的middleLiveData)