LiveData

2020-12-26  本文已影响0人  waiwaaa

LiveData 是一个可被观察的数据持有类,他是官方MVVM架构中的一个核心类,作为一个被观察者,不仅可以被订阅还具有生命周期的感知能力,只有在处理active状态下才会被收到更新。
LiveData是一个抽象类,所有我们在使用时都是用的它的子类,我们来看一下官方为我们提供了实现类MutableLiveDataMediatorLiveData

MutableLiveData

MutableLiveData 是 LiveData 的一个最简单实现,它可以接收数据更新并通知观察者。

val liveDataA = MutableLiveData<String>()
liveDataA.value = someValue
liveDataA.postValue(value)

Transformations#map()

使用 Transformations#map() 方法可以将数据从一个 LiveData 传递到另一个 LiveData

val transformedLiveData = Transformations.map(liveDataA ) { "the a value is:$it" }

当liveDataA的值发生变化时,相对应的transformedLiveData 的值也会相应的得到更新

Transformations#switchMap

switchMap可以通过一个LiveData的值,在几个LiveData的数据之间切换

        val liveDataA = MutableLiveData<Int>().also { it.value=1 };
        val liveDataB = MutableLiveData<String>().also { it.value="bb" }
        val liveDataC = MutableLiveData<String>().also { it.value="cc" }
        val liveDataD = MutableLiveData<String>().also { it.value="dd" }

        val liveData = Transformations.switchMap(liveDataA){
            when(it){
                1->liveDataB
                2->liveDataC
                else-> liveDataD
            }
        }

如上根据liveDataA的值,会在数据源的liveDataB,liveDataC,liveDataD中选择一个返回

MediatorLiveData

MediatorLiveData可以把多个LiveData集合起来

        val liveDataB = MutableLiveData<String>().also { it.value="bb" }
        val liveDataC = MutableLiveData<String>().also { it.value="cc" }
        val mediatorLiveData = MediatorLiveData<String>()
        mediatorLiveData.addSource(liveDataB){ it->
            "it is $it"
        }
        mediatorLiveData.addSource(liveDataC){ it->
            "it is $it"
        }

如上,liveDataB 与 liveDataC中任意一个发生数据更新,都会使 mediatorLiveData 发生更新

本文参考LiveData的数据转换 Transformations使用
自定义LiveData可以参考Android livedata原理解析之自己实现一个简单的LiveData

上一篇下一篇

猜你喜欢

热点阅读