LiveDataExtensions提供一些类似于RxJava操作符的kotlin扩展方法
添加jcenter
buildscript {
repositories {
...
jcenter()
}
}
添加依赖Dependencies
- AndroidX
implementation "com.glensun:livedataext:1.0.0"
- Android Support
implementation "com.glensun:livedataext-nonx:1.0.0"
添加Import
import com.glensun.livedataextension.*
Combining
merge
,LiveData.merge
多个相同类型的liveData合并,产生一个新的liveData
---------[1]------------------------[5]-----------[4]------------->
--------------------[7]------------------------------------------->
merge
---------[1]--------[7]-------------[5]-----------[4]------------->
startWith
在LiveData发射数据之前,插入数据
---------[1]------------------------[5]-----------[4]------------->
startWith(7)
---[7]---[1]------------------------[5]-----------[4]------------->
combine
,LiveData.combine
多个不同类型的liveData合并,产生一个新的liveData
-----------------[1]----------------[5]----[4]-------------------->
--------[A]---------------[B]--------------------------[C]-------->
combine
-----[null,A]---[1,A]----[1,B]-----[5,B]---[4,B]------[4,C]------->
combineNonNull
,LiveData.combineNonNull
多个不同类型的liveData合并,产生一个新的liveData,所有被观察的对象都要有数据才会触发
---------[1]------------------------[5]--------------------------->
--------------------------[A]-------------------------------[B]--->
-----------------[X]------------------------------[Y]------------->
combineNonNull
-------------------------[1,A,X]---[5,A,X]-------[5,A,Y]---[5,B,Y]->
zip
,LiveData.zip
,LiveData<List>.zip
多个相同类型的liveData合并,产生一个新的liveData
---------[1]------------------------[5]----[4]-------------------->
--------------------[7]------------------------------------------->
combine
-------------------[1,7]----------[5,7]----[4,7]------------------>
Transforming
map
响应livedata的变化,并发生转化
---------[1]------------------------[5]-----------[4]------------->
map { it + 2 }
---------[3]------------------------[7]-----------[6]------------->
switchMap
响应livedata的变化,生成一个临时LiveData, 当临时liveData变化时,会触发结果liveData变化
---------[1]------------------------[5]-----------[4]------------->
switchMap { repository.fetch(it) }
------------------[3]------------------------[7]-----------[6]---->
toMutable
将LiveData转变为MutableLiveDataisAllTrue
LiveData<List> 全为trueisAnyTrue
LiveData<List> 任一为truelog
打log,不会影响触发值doBefore
在LiveData触发之前触发doAfter
在LiveData触发之后触发defaultIfNull
当值为null的默认值
Filtering
filter
只有当过滤条件满足时才会触发
---------[1]------------------------[5]-----------[4]------------->
filter { it > 3 }
------------------------------------[5]-----------[4]------------->
filterNonNull
---------[1]------------[null]-------------------------[4]-------->
filterNull
---------[1]-------------------------------------------[4]-------->
distinctUntilChanged
---------[1]------------[1]--------[2]--------[1]-------[4]------->
distinctUntilChanged
---------[1]-----------------------[2]--------[1]-------[4]------->
distinct
---------[1]------------[1]--------[2]--------[1]-------[4]------->
distinct
---------[1]-----------------------[2]------------------[4]------->