欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1.簡單使用

class MainViewModel(countReserved:Int) : ViewModel() {
/*當(dāng)外部調(diào)用counter變量時,實際上獲得的就是_counter的實例,但是無法給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)對各種不同的需求場景,提供了兩種轉(zhuǎn)換方法:map()和switchMap()方法。

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

比如說有一個User類,User中包含用戶的姓名和年齡

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

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

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

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

新建Repository單例類

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開發(fā)中用Kotlin編寫LiveData組件教程的文章就介紹到這了,更多相關(guān)Android LiveData內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論