Data Binding Library
本文档解释了如何使用Data Binding Library 来编写声明式布局并把绑定应用逻辑和布局的胶合代码最小化。
它是一个兼容库,因此拥有很强的灵活性和兼容性,它可以兼容到android2.1.
想要使用本库,android 的gradle版本要大于等于1.5。你可以在这里查看如何更新android Gradle插件。
集成环境
开始使用data binding,需要在Android SDK Manager中下载支持库。
在app的build.gradle中添加如下代码:
Data Binding Compiler V2
android Gradle Plugin 3.1.0 Canary 6 附带的一个可选择的编译器,可以在gradle.properties 文件中添加一下代码来调用:
android.databinding.enableV2=true
新编译器特性:
- ViewBinding 类在使用java编译器之前由Gradle Plugin生成,以此避免java由于不相关原因编译失败出现大量的误报错误。
- libraries 会保留其生成绑定类和映射器的信息,对于多模块项目来说能显著提高数据绑定的性能。
Data Object(DO)
这是一个plain-old Java Object(POJO),这种类型的类都是一些死数据
也可以使用JavaBeans Object:
在data binding的角度来看,这两个类是等价的。
Binding Data
在默认情况下,会根据布局文件的名字来生成一个Pascal格式以Binding结尾的Binding类。例如:布局文件名为main_activity,生成的Binding类为MainAcitivityBinding。这个类持有从layout 属性到layout View所有的binding,还知道如何为binding表达式赋值。
事件处理(Even Handing)
Data Binding允许你编写表达式来处理从View分发出来的事件(例如OnClick)。除少数例外,事件属性名由监听方法的名字来管理。例如:View.OnLongClickListener有一个onLongClick()方法,所以在需要使用这个事件的控件需要添加的属性为:android:onLongClick="@{对象::对象的方法}" 。就是指定对象类里面的这个方法来替代onLongClick方法处理长点击后执行的逻辑业务。有两种方法来实现:
--Method References:在你的表达式中,可引用符合监听器方法签名的方法。Data Binding会将方法引用和其所有者对象包装到监听器中,然后将监听器设置到对应的View上。表达式为空,不创建监听器,而是设置空监听。
--Listener Bindings:这种方法的表达式为lambda表达式。无论如何Data BInding都会给View设置一个监听器,当事件发生时才会判断表达式是否为空。
前一个先判断表达式是否为空在创建监听器,后一个不判断直接设置,执行时才判断。
Method References