设置数据的两种方法:1. setXXX;2. setVariable。
UI/事件的绑定
启用DataBinding。
<include
layout="@layout/include_demo"
app:student="@{student}"/>
事件绑定:
方法引用
android:onClick="@{presenter.onClick}"
监听器绑定
Java中:void onClickXXX(Employee employee)
layout:android:onClick="@{()->presenter.onClickXXX(employee)} //l使用Lamanda语法
说明:其中presenter和employee未layout声明的变量。
变量绑定:
1. layout中增加<data></data>标签,里面声明<variable name="变量名" type="类型"/>
2. 代码中为Binding对象set变量名()参数。
Gradle中使能Data Binding
Data Binding的劣势
1. IDE支持不完善;
2. 报错信息不直接,需要仔细查;
3. 不支持重构
Data Binding主要优势
Databinding的用途
DataBinding会自动检查空指针,但是无法避免数组越界。
DataDinding的表达式缺陷:
1. 无法调用当前所在类的对象(this);
2. 无法使用父类(super);
3. 无法创建对象(new);
4. 无法显示泛型调用。
DataBinding基本工作步骤。
UI/事件绑定
DataBinding的基本用途。
前置知识点
无法解决数组越界的问题
当前访问的属性为null时,会自动返回默认值
方法调用更推荐用双冒号::,
空合并运算符:@{user.displayName??user.lastName},如果第一项不为null就取第一项的值,否则取第二项的值
Margin @dimen+@dimen
https://github.com/markzhai/DataBindingSample
类似方案:
ButterKnife
Android Annotations 需要代码很大改动来配合,功能比ButterKnife强大。
RoboBinding github上有
Data Binding 基本用途:
去掉Activity & Fragment 内的UI代码
XML变成UI的唯一真实来源
减少定义view id的主要用途
不会因没有id而crash
劣势:
报错信息不直接
IDE不够完善
没有重构支持