1.module(如:app)的build.gradle中添加dataBinding的使能开关
dataBinding{
enabled true
}
2.xml使用
a.
在原布局文件外套一层layout标签,把命名空间移到layout标签内
layout标签内部包含数据模块和样式模块(原布局)
数据模块使用data标签,定义变量名称name——下面android:text属性中调用的名称,及类型type——定义变量所指的类型或类(如果是自定义类,必须给完整包名+类名)
xmlns:tools="http://schemas.android.com/tools"> name="user" type="com.zjun.databinding.demo.bean.User" /> android:id="@+id/activity_fast_use" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="@dimen/activity_vertical_margin" tools:context="com.zjun.databinding.demo.FastUseActivity"/>
b.xml中的使用语法
每一个变量variable都是由名称name和类型type组成。name可以在布局文件中使用,也可以通过Setter和Getter在代码中使用。type可以是基本数据类型、集合、适配器、自定义类等,除了基本类型,其他都必须把包名写全
双引号中可以套“`”(Tab键上面,非单引号),单引号内可以套双引号;
不能直接用boolean和int类型的值。而且int值将被当做资源文件。因此要使用其数值,必须转换成字符串,如(boolean同理): "@{user.age + ``}"
,或 "@{String.valueOf(user.age)}"
颜色必须使用ARGB制,指定其所有的透明度和单色值,以前的#F00和#FF0000无效,且前面不能加“#”
"@{user.nickname ?? user.name}"
,代表user.nickname为null时显示user.name,否则显示自己。等同于"@{user.nickname == null ? user.name : user.nickname}"
比较运算符,必须使用转义字符:
大于号“>”——>
小于号“<”——<
不能直接使用中文(MD),如: android:text='@{user.male ? "男" : "女"}'
将报错,得用string引用,改成: android:text='@{user.male ? @string/male : @string/female}'
3.代码中使用
ActivityMainBinding mBinding= DataBindingUtil.setContentView(this, R.layout.activity_main);
ActivityMainBinding是由布局文件activity_main.xml的文件名生成的。
DataBindingUtil.setContextView()生成的是抽象类ViewDataBinding,
方法引用:在表达式中,可以引用符合侦听方法签名的方法。当表达式求值为方法引用时,数据绑定将方法引用和持有者对象封装在侦听中,并将该监听绑定到在目标View上。如果表达式求值为null,则数据绑定不会创建监听,而是将监听设置为null。对于被引用的方法,其参数必须包含一个参数(view: View).
监听绑定:这些是在事件发生时被执行的lambda表达式。数据绑定总是创建一个设置在View上的监听。 当事件分派时,监听执行lambda表达式。
在方法引用中,方法的参数必须与监听事件的参数匹配。在监听绑定中,只要返回值必须与侦听的期望返回值相匹配(除非预期返回值为void)。
项目地址
参考https://blog.csdn.net/stamsuper/article/details/78574996