本文都是接合其他作者的总结,再加上自己实际操作中遇到的一些问题,来综合编写。
DataBinding的配置
因为网上一篓筐,就直接上代码
android {
...
//核心配置代码在这里
dataBinding {
enabled = true
}
}
就这样三行代码,DataBinding就配置好了。 真的是So easy 妈妈那什么~~~
四个标签的使用
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View"></import>
<variable
name="tv1data"
type="String"></variable>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.scs.myapplication.MainActivity">
</LinearLayout>
</layout>
很直观,我们可以看到四个标签<layout><data><import><variable>
- <layout>
1.其实在DataBinding中,它必须是最外层的标签,是根布局,里面有且只能包裹一个子View,就像Scrollview。
2.xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
这两个命名控件一定要加上
3.layout标签的直接子标签不能是merge,否则报错。
4.fragment标签不支持dataBinding表达式,即在fragment标签中使用任何dataBinding表达式都会报错
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="data"
type="String"></variable>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:layout_width="match_parent"
android:tag="@{data}"
android:layout_height="match_parent"></fragment>
</LinearLayout>
</layout>
查看源码就可知道原因
else if ("fragment".equals(nodeName)) {
if (XmlEditor.hasExpressionAttributes(parent)) {
L.e("fragments do not support data binding expressions.");
}
continue;
}
-
<data>
1.<data>这个标签,其实就是用来承载数据的,在其内部可以定义多个<import><variable>标签
2.<data>标签,有且只能定义一个
3.<data>有个class数据,就是用来定义,编译出的binding的类的位置
下图就是我未定义class,默认的路径,可以看出有四个布局文件,使用了DataBinding
<import>
<import
type="com.example.scs.myapplication.StudentBean"
alias="student1">
</import>
<import
type="com.example.scs.myapplication.StudentBean"
alias="student2">
</import>
<import>有两个属性,type就是要引用类的位置,alias就是别名。
别名的用途如上所示,当定义了多个同type的import的时候,就是要用别名去区分,不然就要出大事情
- <variable>
<variable
name="data"
type="String">
</variable>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:text="@{data}"
android:layout_height="match_parent" />
</LinearLayout>
<variable>标签可谓是DataBinding机制的核心之一,是java代码和xml的枢纽。可以理解为要绑定的变量,name就是变量的名字,type就是变量的类型。
如上述代码所示,TextView就绑定了data数据。
好了 基本的概念的陈述完了,欲知详情请看DataBinding(2)