文章目录
一、简单介绍
Transformations 类是 LiveData 的一个功能扩展类,其是一个私有化构造方法的工具类,且只提供 3 个方法使用,虽然数量不多,但胜在实用,这三个方法分别是:
- map
- switchMap
- distinctUntilChanged
那么接下来我们就一一分析每个方法及其源码实现过程,如果想要更清楚的了解源码建议先了解 这篇文章。
二、map
其实看名字我们就能大概知道这个方法是个什么样的存在……

类似于 RxJava 的 map 操作符、Kotlin 中数组的扩展函数 map,其实 Transformations 的 map 方法也是一个转化的功能。
1、普通实现
先看看效果:
private val originData = MutableLiveData<String>()
// 通过 Transformations.map 返回一个 LiveData
val mapData = Transformations.map(originData, Function<String,String> {
it.plus(" World")
})
mapData.observe(this, Observer {
Log.e("mapData",it)
})
// 点击按钮给 originData 赋值
btn.setOnClickListener {
originData.value = "Hello"
}
控制台输出:
mapData: Hello World
2、转换类型
相信大家也看到了,map() 方法的第二个参数的类型有两个泛型,事实上第一个个泛型的类型是确定的,那就是对应 map() 方法第一个参数 LiveData 的泛型,那么第二个泛型就是控制返回的 LiveData 的类型。改造上面的例子:
... ...
val mapData = Transformations.map(originData, Function<String,Int> {
it.length
})
mapData.observe(this, Observer {
Log.e("mapData",it.toString())
})
... ...
控制台输出:
mapData: 5
3、Kotlin 扩展
... ...
val mapData = originData.map {
it.plus("world")}
... ...
如果遇到报错:Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1,那就在模块的 gradle 中添加:
android{

本文深入解析LiveData Transformations类中的map、switchMap和distinctUntilChanged方法,通过实例展示这些方法如何在Android开发中处理数据流的转换与过滤。

652

被折叠的 条评论
为什么被折叠?



