一、用法
1、注册,采用dataBinding
android{
...
dataBinding{
enabled = true
}
...
}
2、修改布局文件
在布局外层加入标签
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="@{book.boonName}"
android:id="@+id/mTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16dp"
android:padding="6dp"/>
<TextView
android:text="@{book.bookAuthor}"
android:id="@+id/mAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16dp"
android:padding="6dp"/>
<TextView
android:text="@{BookRatingUtils.getBookRating(book.rating)}"
android:id="@+id/mRating"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16dp"
android:padding="6dp"/>
</LinearLayout>
</layout>
这样做的目的是告诉DataBinding库,希望对该布局进行绑定。DataBinding库会自动绑定该布局并生成对应的Binding类。
3、实例话布局文件
通过DataBindingUtil.setContentView()方法实例化布局文件,该方法返回实例化后的布局文件对象,名字与布局文件名字保持一致( 例如布局文件为activity_main则会生成ActivityMainBinding类);
private ActivityMainBinding mMainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
mMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
}
4、将数据绑定到布局文件中
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<!--布局变量需要定义在 <data>标签中-->
<data>
<variable
name="book"
type="com.cdv.databindingdemo.BookBean"/>
</data>
<LinearLayout>
<TextView/>
<TextView/>
<TextView/>
</LinearLayout>
</layout>
然后在Activity中通过setVariable()方法,将Book对象传递给布局文件的布局变量。
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding mMainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
mMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
BookBean book = new BookBean();
book.setBoonName(" android Book");
book.setBookAuthor("cdv");
book.setRating(3);
mMainBinding.setVariable(BR.book,book);
}
}
5、绑定布局变量与成员变量
DataBinding库提供了表达式以@{}的格式为属性赋值。
<TextView
android:text="@{book.boonName}"/>
<TextView
android:text="@{book.bookAuthor}"/>
或者在Activity中通过setText方式赋值:
mMainBinding.mAuthor.setText(book.bookAuthor);
mMainBinding.mTitle.setText(book.bookName);
6、在布局文件中引用静态类
有时候我们可以在布局文件中引用一些工具类,用于控制UI的显示。
比如给Book打星
public class BookRatingUtils {
public static String getBookRating(int rating){
switch (rating){
case 1:
return "1星";
default:
return "0星";
}
}
}
<data>
<!--通过import标签引入静态工具类-->
<import type="com.cdv.databindingdemo.BookRatingUtils"/>
<!--布局变量需要定义在 <data>标签中-->
<variable
name="book"
type="com.cdv.databindingdemo.BookBean"/>
</data>
使用静态工具类:
<TextView
android:text="@{BookRatingUtils.getBookRating(book.rating)}"
android:id="@+id/mRating"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16dp"
android:padding="6dp"/>
7、实例代码地址
https://github.com/muyexiaogui/DailyExercise/tree/master/databindingdemo