最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開(kāi)發(fā)中用Kotlin編寫(xiě)LiveData組件教程

 更新時(shí)間:2022年12月02日 09:49:15   作者:Hdnw  
LiveData是Jetpack組件的一部分,更多的時(shí)候是搭配ViewModel來(lái)使用,相對(duì)于Observable,LiveData的最大優(yōu)勢(shì)是其具有生命感知的,換句話(huà)說(shuō),LiveData可以保證只有在組件( Activity、Fragment、Service)處于活動(dòng)生命周期狀態(tài)的時(shí)候才會(huì)更新數(shù)據(jù)

LiveData是Jetpack提供的一種響應(yīng)式編程組件,它可以包含任何類(lèi)型的數(shù)據(jù),并在數(shù)據(jù)發(fā)生變化的時(shí)候通知給觀察者。也就是說(shuō),我們可以將數(shù)據(jù)使用LiveData來(lái)包裝,然后在Activity中去觀察它,就可以主動(dòng)將數(shù)據(jù)變化通知給Activity了。

1.簡(jiǎn)單使用

class MainViewModel(countReserved:Int) : ViewModel() {
/*當(dāng)外部調(diào)用counter變量時(shí),實(shí)際上獲得的就是_counter的實(shí)例,但是無(wú)法給counter設(shè)置數(shù)據(jù),從而保證了ViewModel的數(shù)據(jù)的封裝性。*/
    val counter:LiveData<Int>
        get()=_counter
    private val _counter = MutableLiveData<Int>()
    init{
        _counter.value=countReserved
    }
    fun plusOne() {
        val count =  _counter.value ?: 0
         _counter.value = count + 1
    }
    fun clear() {
         _counter.value = 0
    }
}
class MainActivity : AppCompatActivity() {
    …
    override fun onCreate(savedInstanceState: Bundle?) {
        …
        plusOneBtn.setOnClickListener {
            viewModel.plusOne()
        }
        clearBtn.setOnClickListener {
            viewModel.clear()
        }
        viewModel.counter.observe(this, Observer { count ->
            infoText.text = count.toString() // 將最新數(shù)據(jù)更新到界面上
        })
    }
}

2.map和switchMap

LiveData為了能夠應(yīng)對(duì)各種不同的需求場(chǎng)景,提供了兩種轉(zhuǎn)換方法:map()和switchMap()方法。

map()方法的作用就是將實(shí)際包含數(shù)據(jù)的LiveData和僅用于觀察數(shù)據(jù)的LiveData進(jìn)行轉(zhuǎn)換。

比如說(shuō)有一個(gè)User類(lèi),User中包含用戶(hù)的姓名和年齡

data class User(var firstName:String,var lastName:String,var age:Int)

map()方法可以將User類(lèi)型的LiveData自由地轉(zhuǎn)型成任意其他類(lèi)型地LiveData。

class MainViewModel(countReserved:Int) : ViewModel() {
   private val userLiveData = MutableLiveData<User>()
   val userName:LiveData<String>=Transformations.map(userLiveData){user->
   "${user.firstName} ${user.lastName}"
   }
}

如果ViewModel中的某個(gè)LiveData對(duì)象時(shí)調(diào)用另外的方法獲取的,那么我們就可以借助switchMap()方法,將這個(gè)LiveData對(duì)象轉(zhuǎn)換成另一個(gè)可觀察的LiveData對(duì)象。

新建Repository單例類(lèi)

object Repository{
   fun getUser(userId:String):LiveData<User>{
      val liveData=MutableLiveData<User>()
      liveData.value=User(userId,userId,0)
      return liveData
   }
}
class MainViewModel(countReserved:Int) : ViewModel() {
   private val userLiveData = MutableLiveData<User>()
   val user:LiveData<User>=Transformations.SwitchMap(userIdLiveData){userId->
    Repository.getUser(userId)
   }
   fun getUser(userId:String){
     userIdLiveData.value=userId
   }
}

到此這篇關(guān)于Android開(kāi)發(fā)中用Kotlin編寫(xiě)LiveData組件教程的文章就介紹到這了,更多相關(guān)Android LiveData內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

汾西县| 克东县| 温州市| 三门峡市| 大埔区| 乌兰浩特市| 苗栗县| 兴安盟| 乌苏市| 垦利县| 迁西县| 衡南县| 徐汇区| 东乡族自治县| 莱西市| 泗洪县| 黄陵县| 清水河县| 闽侯县| 海淀区| 博客| 湖口县| 资源县| 合阳县| 眉山市| 黎平县| 阿坝| 丰宁| 沂源县| 汝南县| 福鼎市| 浮山县| 石林| 剑川县| 兰州市| 洛川县| 青神县| 丰顺县| 乐亭县| 玉溪市| 泗水县|