1.編譯配置
在app模塊的build.gradle增加dataBinding
android {
...
dataBinding {
enabled = true
}
}
2.Layouts 和綁定表達(dá)式(Layouts and binding expressions)
Data binding layout與通常所用的文件有些差別,根標(biāo)簽是layout ,然后是data 和view 根元素。這個(gè)view 根元素就是通常用的layout
<?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>
<variable
name="user"
type="com.caicai.databinding.User"/>
</data>
<!-- UI 布局根元素 -->
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintLeft_toRightOf="@+id/gender"
/>
<TextView
android:id="@+id/gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/name"
app:layout_constraintRight_toRightOf="parent"
android:text="@{user.gender > 0 ?@string/female: @string/male}"
/>
</android.support.constraint.ConstraintLayout>
</layout>
android:text="@{user.name}"表達(dá)式Data binding庫(kù)根據(jù) user.getName()的返回值類型找setText(arg)方法。如果返回值是String類型,就會(huì)找到接收String參數(shù)的setText()方法;如果返回int類型,就會(huì)找到接收int 參數(shù)的setText()方法。所以表達(dá)式必須要返回正確的類型。
3.數(shù)據(jù)(Data object)
package com.caicai.databinding;
public class User {
private String name;
private int gender;
public String getName() {
return name;
}
public int getGender() {
return gender;
}
public User(String name, int gender) {
this.name = name;
this.gender = gender;
}
}
4.綁定數(shù)據(jù)(Binding data)
每一個(gè)layout文件都會(huì)生成一個(gè)binding 類。類的名稱是根據(jù)layout的名字轉(zhuǎn)換并添加Binding前綴:如activity_main.xml,生成的類是ActivityMainBinding。
推薦初始化layout的時(shí)候創(chuàng)建綁定,如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("pinkcat", 1);
binding.setUser(user);
}
}