dataBind的使用
1。 引入注意: build.gradle 文件中加入android下加入:
dataBinding{
enabled = true
}
2。布局文件注意
根节点变成了layout , 并且新增了一个节点data

data节点的作用:
给View和Model之间的建立映射的联系。实现数据到UI的绑定。
variable节点的作用
为UI元素提供数据, 然后在java代码中把数据与这个variable进行绑定
属性作用:
name :取得名字,一般取对应的javabean的类,描述了布局中会用到的属性, 布局文件中使用 @{} 语法
type: 声明对应的javabean类
class:自定义生成的Binding类
alias : 别名,用来出现导入同名的类
java.lang.*包中的类会被自动导入,无需再import。
3 。绑定Variable注意
在默认情况下,会基于布局文件生成一个继承与ViewDataBinding的Binding 类, 名字取名规则: 转换帕斯卡命名并在名字后面加上Binding;也可以在data下通过 class方式自定义类名

生成的绑定类,包含了布局文件中的所以绑定关系, 会根据绑定的表达式给布局文件赋值。
在Activity中,用DataBindingUtil.setContentView 替换掉setContentView
在使用inflate,用DataBindingUtil.inflate()替换
4 . 空合并运算符 ?? 会在非null的时候选择左边的操作,否则选择右边。 等价于三目运算符 ? :
5 Binding 类会生成一个命名为 content的特殊变量, 就是getContext()的返回值,可以用于表达式中。
6 includes中使用:在使用应用命名空间的布局中, 变量可以传递到任何 include布局中。 在各自的布局中都要申明相应的变量
7 不支持 merge节点
8 通用的容器类:数组, List SparseXXX , Map ,可以用[] 操作符来存取
9 带id的view , DataBind就会生成一个对应的final 变量
10 事件处理
1。方法引用 :在表达式中, 引用符合监听方法签名的方法。 优点 :表达式在编译时处理,方法不存在或签名不正确 编译出错 :: 调用
2. 监听器绑定,lambda 表达式, 事件发生时,处理。() -> 处理
11 自定义binding 逻辑 在布局文件中自定义属性xxx , 在布局文件中使用。 在对应逻辑的方法处通过加上@BindingAdapter({“xxx”}) 设置该属性,则绑定后会自动调用。


网友评论