LiveData类是用来观察生命周期变化的组件,LiveData是可观察的,当持有的数据发生变化后,观察者会收到通知。可以保存任意类型的数据。当观察者关联到LiveData时,两者的生命周期也会相关联,LiveData只更新活跃的观察者(Started或Resumed)
使用LiveData时,需要将被观察的变量,数据声明为MutableLiveData类型,MutableLiveData是一个可更改数值的LiveData,由于是泛型的,还需要指定一个数据类型
设置绑定Observiers的时候,需要在onCreateView方法中关联,并使用viewLifecycleOwner作为observers的参数,因为当用户离开Fragment的时候,Fragment的视图会被销毁,但是Fragment本身不会被销毁,本质上有两套生命周期,即Fragment的生命周期和Fragment视图的生命周期,当更新Fragment的视图时,会导致引用的对象不一致
LiveData通常和ViewModel配合使用,在ViewModel中创建,
viewModel.livedata.observe(viewLifecycleOwner, Observer {
data->
})
通过observer进行观察绑定,当viewModel里的data发生变化后,data会收到事件通知
MutableLiveData和LiveData相比,区别就是前者可以编辑,后者只读,因此建议将MutableLiveData类型的数据定义为私有的,LiveData定义为public的,对外读取使用LiveData,对内更新使用MutableLiveData,LiveData定义一个get方法,将MutableLiveData赋值给LiveData
---------------------------------------------------------------------------
如果项目中引用了data binding,则可以在xml文件中生命相关viewModel文件,直接在xml的控件中设置viewModel的相关属性
<data><variablename="xxxViewModel"type="com.xxx.xxxViewModel" />
</data>
在对应java/kt文件中,声明其databing 并与viewModel进行相关绑定,之后在xml文件中,可以在对应的view控件上,text展示或onClick执行viewModel里的数据和方法
将binding的生命周期和fragment的view生命周期绑定
binding.lifecycleOwner = viewLifecycleOwner
就可以得到livedata observer绑定相同的效果
网友评论