背景
最近在学习JetPack系列组件,顺便记录下LiveData的使用,其中相关概念的性东西不再介绍,需了解相关知识点请查看其他博客,本篇文章旨在记录LiveData使用,大佬请忽略。
1.创建ViewModel类
下面就以星级服务打分操做为实例进行讲解 首先我们需要创建StartViewModel,并且继承与ViewModel方法,代码如下
class StartViewModel :ViewModel(){
private var liveData:MutableLiveData<List<StartBean>>?=null
fun getDataBean():LiveData<List<StartBean>>{
if(liveData==null){
liveData= MutableLiveData()
loadData()
}
return liveData as MutableLiveData<List<StartBean>>
}
fun loadData(){
val girls: MutableList<StartBean> = ArrayList()
girls.add(StartBean("一星", " * "))
girls.add(StartBean("二星", " ** "))
girls.add(StartBean("三星", " *** "))
girls.add(StartBean("四星", " **** "))
girls.add(StartBean("五星", " ***** "))
liveData?.postValue(girls)
}
//提供一个方法来改变数据
fun changeValue(i: Int, start:String, level:String) {
val value = liveData?.value
value?.get(i)?.level= level
value?.get(i)?.start= start
liveData?.postValue(value)
}
}
其中实现了数据添加通知以及数据更新通知的实例,体现LiveData的方便之处,减少了我们以前写代码时候必须要实现方法的回调才能更新。
startBean类
class StartBean constructor(var start:String,
var level:String) {
}
2.MainActivity类实现
1.实例化StartViewModel
private val MainActivity.startViewModel: StartViewModel
get() {
val myNameViewModel = ViewModelProviders.of(this).get(StartViewModel::class.java)
return myNameViewModel
}
2.订阅/监听ViewModel数据更新状态
startViewModel.getDataBean().observe(this, {
//循环遍历
for ( i:Int in 0 .. it.size-1){
Log.e("result",it.get(i).start+","+it.get(i).level)
}
}
)
更新集合数据
//通过btn方法调用
fun update(view: View) {
startViewModel.changeValue(1,"五星","*****")
}
3.效果
就这样,liveData作为一个双向绑定变量数据就这样完成了,现在越来越方便了,如果你会vue,你会发现它们之间有很多的相同点了。