亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

1.簡單使用

class MainViewModel(countReserved:Int) : ViewModel() {
/*當外部調用counter變量時,實際上獲得的就是_counter的實例,但是無法給counter設置數據,從而保證了ViewModel的數據的封裝性。*/
    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() // 將最新數據更新到界面上
        })
    }
}

2.map和switchMap

LiveData為了能夠應對各種不同的需求場景,提供了兩種轉換方法:map()和switchMap()方法。

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

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

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

map()方法可以將User類型的LiveData自由地轉型成任意其他類型地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對象時調用另外的方法獲取的,那么我們就可以借助switchMap()方法,將這個LiveData對象轉換成另一個可觀察的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
   }
}

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

相關文章

最新評論