其实MediatorLiveData最常用的用法是结合Transformation来使用,下面将介绍Transformation的用法
Transformation 转换Transformation内部原理使用MediatorLiveData实现的
有的时候我们需要对当前data 转换成我们需要的另一种data
比如rxJAVA的map方法
Flowable.range(1, 10) .map { "index: $it" } .subscribe {}再比如 kotlin自带的map扩展方法
val list = listOf(1, 2, 3, 4).map { "index: $it"}LiveData 也提供了类似的map功能
// 创建LiveDataval userLiveData: LiveData<User> = MutableLiveData<User>()val userName: LiveData<String> = Transformations.map(userLiveData) { user -> "${user.name} ${user.lastName}"}//观察数据的更新userName.observe(this, Observer { tv_text.text = it})...// 更新数据userLiveData.value = https://www.isolves.com/it/cxkf/ydd/Android/2019-08-01/User("zhang", "san")LiveData 也提供了switchMap方法转换数据,它与map唯一的不同是将data转换成一个LiveData<T>,因此在转换过程中可以继续做异步操作请求数据等,他跟rxjava的flatmap方法有点像
// 先使用room数据库定义一个UserDao example@Daoabstract class UserDao { @Query("select * from tab_user where uid = :uid") abstract fun getById(uid: Long): LiveData<User>} ...private fun getUser(id: String): LiveData<User> { // 可以使用room数据查询user对象 // return AppDataBase.getUserDao().getUser(id) // 你也可以发网络请求查询user对象 return object: LiveData<User>() { override fun onActive() { super.onActive() // 模拟网络请求数据 Flowable.timer(3, TimeUnit.SECONDS) .subscribe { postValue(User("zhang", "san")) } } }}...val userId: LiveData<String> = MutableLiveData<String>()val user = Transformations.switchMap(userId) { id -> getUser(id) }//观察数据的更新user.observe(this, Observer { tv_text.text = "${it.name} ${it.name}"})...// 更新数据userId.value = https://www.isolves.com/it/cxkf/ydd/Android/2019-08-01/"001"LiveData使用起来比较简单,功能就介绍到这里,建议查看一下官方demo 学习结合其它library的用法
推荐阅读
- Android开发者!好好管理你应用文件夹,别再乱用了
- Android中的线程捕获
- OPPO方面确认,Find X2系列将尝鲜Android 11
- Android网络优化篇-从DNS开始
- 总是听到有人说AndroidX,到底什么是AndroidX?
- 不要轻易点击别人给你发的链接,看Kali如何远程控制Android手机
- 手机浮窗怎么去掉
- Android 日常开发总结的技术经验
- Android开发:手把手带你入门跨平台UI开发框架Flutter
- Android程序员如何快乐地学Activity?
