Databing简介

  • databing就是数据绑定,可以代替findViewById,让代码更简洁,而且比注解框架(如ButterKnife)效率高。

  • 使用:

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

你可能感兴趣的:(android)