美文网首页
【白水日记】LiveData and Data binding

【白水日记】LiveData and Data binding

作者: d2665f7588cb | 来源:发表于2021-02-19 14:28 被阅读0次

    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绑定相同的效果

相关文章

网友评论

      本文标题:【白水日记】LiveData and Data binding

      本文链接:https://www.haomeiwen.com/subject/jxxwxltx.html