介绍#
DataBinding,2015年IO大会介绍的一个框架,是Google对MVVM在Android上的一种实现,可以直接数据绑定到xml中,并实现自动刷新。
好处:
去掉了大部分的UI相关代码(比如findViewById、 setOnClickListener、setText等)
xml变成UI的唯一真实来源,数据绑定也直接发生在xml
(更多可以在网上查询)
我在网上也看了很多的资料,写的都很不错,但是大都很老旧,所以自己在这个基础上,重新整理一下大部分的常用知识点。
配置#
网上有很多是以前的资料,现在基本上都是基于AS 2.2 和 gradle 2.2 以上开发,比起想办法姜蓉老版本,我更希望你能直接把你的IDE升级,所以下面的配置都是基于gradle 2.2 以上。
首先在配置gradle文件
android{
......
dataBinding{
enabled = true
}
}
注意是在android里面添加,然后就完成了(完美)。
实战#
直接扔出代码,让我们直接看看DataBinding到底能做什么。
查一下实际的运行情况
User的代码没有给,他只有一个name属性还有set和get方法,很简单的一个类。
先看xml的变化,最外层的多出了一个layout标签,然后在layout标签中,还多了一个data标签,在TextView中调用了variable 对应的name的对象的属性和方法。
然后看java代码,setContentView被替换成了DataBindingUtil.setContentView,并且返回了一个ViewDataBinding对象,在这个对象中我们调用了setVariable()来对 xml定义的user和listener进行赋值。
看完代码,我们基本上就了解了最基础的知识:
1、使用DataBinding,要在原来的xml最外层嵌套<layout>标签。
2、<data>标签中可以定义这个xml到底绑定了哪些东西。其中<variable>定义的肯定是个对象类,name是引用的名字,type对应的具体的类的完成包名+类名。
3、在xml中的view使用<variable>定义的类中,语法最外层是 @{},如果调用的属性@{ name.filed}, 如果是方法 @{ () -> name.function()}
4、需要替换setContentView,变为DataBindingUtil.setContentView(),来获得能够操作xml中定义的各种内容。
5、在xml中定义的name对象,会生成类似于R文件的BR文件,通过BR.name 就可以找到对应的绑定内容。
深化概念#
我们已经基本明白了DataBinding使用的答题步骤,这样非常有利于理解一些具体的概念:
1.ViewDataBinding
一般是DataBindingUtil 调用setContentView(Activity activity,int layoutId)返回的对象,用于对xml绑定的数据进行操作和赋值。
setVariable(int BR.id, Object value)
2、DataBindingUtil
setContentView(Activity activity,int layoutId)
从layout中创建数据绑定类,还有其他的一些api以后会使用到。
总结#
我们已经对DataBinding有了一个初步的了解,一开始对于DataBinding听起来怎么高大上的技术也渐渐放下了心中的不安,那这一篇的成果就非常棒了,所以下一篇会对这些基础知识再进行一次丰富。