LiveData

作者: waiwaaa | 来源:发表于2020-12-26 17:09 被阅读0次

    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

    相关文章

      网友评论

          本文标题:LiveData

          本文链接:https://www.haomeiwen.com/subject/qzevbktx.html