您当前的位置: 首页 > 
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

DataBinding梳理

沙漠一只雕得儿得儿 发布时间:2021-12-01 11:49:22 ,浏览量:0

一、什么是DataBinding:

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)控制

三、传统写法和DataBinding区别: 1.传统写法:

因为普通写法大家都很熟悉,此处不再阐述

(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,所以会生成一个ActivityMainBinding 类。这个类包含了布局文件中所有的绑定关系,会根据绑定表达式给布局文件赋值。

2.用binding去set一下需要绑定的数据,一次绑定即可。

(4)更新数据:

正常更新数据即可,该数据对象发生变化时,DataBinding会自动监听数据变化并更新UI。

五、进阶使用:

如果有的View不支持DataBinding怎么办。比如Fresco。

步骤如下:

1。自定义属性值将相应的数据从xml传进去。

2.在任意的类中使用BindingAdapter接受传入的属性值和对应的View对象,这两个传入的参数是系统自动生成的,另外此方法必须是static才可以

六、总结: 好处:

1.编写方便

2.执行效率高

3.代码解耦

坑:

1.xml中没有代码校验,编写时不会实时提醒编写错误,对排查编写造成的问题增加难度

2.开发的架构模式与普通的MVC不一样,新人编写或者维护有一定学习成本

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0375s