Databinding 是一个Google开源的实现数据和UI绑定的框架,是一个实现 MVVM 模式的工具。有了 Data Binding,在Android中也可以很方便的实现MVVM开发模式。
二、关于MVVM 模式:相比于Android中正常的MVC模式,MVVM中:
1.XML中设置view对应的数据
2.Binding负责将数据同步到UI或者将UI上的数据修改同步到数据中
3.各个Activity、Fragment或者其他类只负责更新数据,UI的更新由binding统一处理
一句话就是:View和Model的交互完全由中间件ViewModel(系统自动生成的binding)控制
因为普通写法大家都很熟悉,此处不再阐述
(1)编写DataBean
(2)编写XML
(3)findView
(4)更新数据
(5)更新UI
2.DataBinging流程:DataBinging对传统的写法进行了大幅简化,省去了findView和更新UI的步骤,提高的代码的编写效率
(1)编写DataBean
(2)编写XML
(3)初始化
(4)更新数据
四、DataBinding使用方式: (1)编写XML:有三点注意,对应上面三个序号:
1.根视图使用layout标签
2.增加data和variabl,其中variable是代码中的任意类,type为代码中类的名称,name是在xml中使用的该类的名称。
3.类中的方法或对象直接对应相应的view,比如text可以直接和MyData中的Url进行绑定
(2)编写DataBean:有三点注意,对应上面三个序号:
1.DataBean需要继承BaseObservable,BaseObservable功能的具体表现主要是在数据源发生改变时,自动通知view刷新数据。
2.对应需要自动更新UI的变量需要加get方便,并且加声明@Bindable
3.在get方法中,需要自动同步UI需要添加notifyPropertyChanged(BR.XXX)。其中BR为系统根据继承BaseObservable的类自动生成,XXX为get对应的变量
(3)初始化:有两点注意,对应上面三个序号:
1.填充页面时使用DataBindingUtil.setContentView(this, R.layout.activity_main),DataBindingUtil也有Inflate可选择。
在默认情况下,会基于布局文件生成一个继承于 ViewDataBinding
的 Binding 类,将它转换成帕斯卡命名并在名字后面接上Binding
。例如,布局文件叫 activity_main_.xml
,所以会生成一个Activity
类。这个类包含了布局文件中所有的绑定关系,会根据绑定表达式给布局文件赋值。Main
Binding
2.用binding去set一下需要绑定的数据,一次绑定即可。
(4)更新数据:正常更新数据即可,该数据对象发生变化时,DataBinding会自动监听数据变化并更新UI。
五、进阶使用:如果有的View不支持DataBinding怎么办。比如Fresco。
步骤如下:
1。自定义属性值将相应的数据从xml传进去。
2.在任意的类中使用BindingAdapter接受传入的属性值和对应的View对象,这两个传入的参数是系统自动生成的,另外此方法必须是static才可以
1.编写方便
2.执行效率高
3.代码解耦
坑:1.xml中没有代码校验,编写时不会实时提醒编写错误,对排查编写造成的问题增加难度
2.开发的架构模式与普通的MVC不一样,新人编写或者维护有一定学习成本