本文都是接合其他作者的總結畸冲,再加上自己實際操作中遇到的一些問題馒索,來綜合編寫姻灶。
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>這個標簽铺根,其實就是用來承載數(shù)據的,在其內部可以定義多個<import><variable>標簽
2.<data>標簽乔宿,有且只能定義一個
3.<data>有個class數(shù)據位迂,就是用來定義,編譯出的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的時候刑顺,就是要用別名去區(qū)分氯窍,不然就要出大事情
- <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數(shù)據朽基。
好了 基本的概念的陳述完了,欲知詳情請看DataBinding(2)