今天跟大家一块学习一下databinding,了解了databinding的思想后,下一步会对MVVM有一个比较深刻的认识。
一、databinding是什么
一句话概括:一个用来更好绑定布局文件和代码逻辑的库
二、如何使用databinding
1.在build.gradle文件中进行如下配置
2.一个简单的databinding的布局文件如下
通过代码可以看出,布局文件和之前常用的布局文件不同,这个布局文件的根节点是一个 layout元素,然后接下来是一个 data元素和一个普通的视图布局元素(这里是LinearLayout),data节点可以包含很多变量,这里我们只引入了一个user变量,类型结构如下
我们重点来看布局文件中的2个TextView的文字设置,一般的做法会是,在java代码中,通过findViewById来查找视图,然后通过代码将数据set到view上,那么databinding是如何实现的呢?来看使用databinding实现的数据展示到视图上的过程
OK,到此为止,一个最简单的使用databinding的demo已经完成了。接下来我们进行扩展,通过扩展内容,就能逐渐看清databinding能够为我们带来哪些便利。
事件的处理
我们能够自定义类似点击事件的处理,方法如下:
在布局文件中添加视图的点击处理:
真正的处理事件的句柄如下:
之前一般的布局文件也可以实现简单的点击事件的处理功能,但是前提是函数必须定义在视图的布局的容器当中,但是databinding可以只定义一个句柄,然后处理自己的事件,相当于有了一个事件的处理hub
我们还可以为事件处理传递参数:
在布局文件中,我们还可以进行简单的视图逻辑的处理
当然也包括简单的运算
我们已经实现了简单的数据展示到视图上的操作,databinding帮我们把java代码里面处理视图的逻辑转换到了布局文件当中,增强了布局文件的编程处理。
我们再回头看我们之前定义的User类。按照我们以往的处理方式,我们给视图设置数据之后,如果java代码中的数据放生变化,那么肯定会需要手动刷新视图,databinding帮我们节省了手动刷新的步骤,一旦实现数据绑定,数据改变之后,绑定的视图会自动刷新,这个是怎么实现的?
介绍一个神奇的接口 Observable Objects
记住一句话:凡是继承这个接口的数据model,当成员变量发生变化的时候,都会通过监听通知到绑定的视图,让视图进行刷新。
这里不做底层代码的解析,先学会怎么使用
这里使用的Bindle的注解,使用databinding,在编译的时候,会生成一个BR文件,这是一个桥接视图和数据的文件,Bindle注解描述的成员变量改变的函数会通知BR文件,BR文件会再通知到绑定的视图,从而实现自动刷新。
最后,祭出大杀器-----自定义注解
举一个简单例子,TextView加载Html文字
重点来了,htmlLable到底是如何自定义的?
所有的自定义的注解的标签,可以集中到一个文件当中,布局文件中出现使用自定义标签的时候,会自动进行查找,实现我们的代码逻辑,amazing。布局文件的变成能力很弱,一直是Android的一个痛点,使用databinding,能够有效解决这个问题,让我们更加专注于java代码中的业务逻辑,让布局文件自己解决或者解决大部分的视图的逻辑问题。
这里只是简单介绍databinding的使用,尚有很多功能没有介绍到,大家在使用的过程中多多总结,形成最佳实践。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8