Data Binding Library是一个support library,它可以减少编程中绑定业务逻辑和布局的一些粘合代码。该库支持的sdk版本是Android 2.1 (API level 7+)及以上,同时要求Android Studio的gradle插件版本在1.5.0-alpha1及以上。
目前演示使用的Android Studio版本为3.0,gradle插件版本2.3.3,gradle版本gradle-4.0-milestone-1-all。
构建环境
在需要使用Data Binding Library的module,在其build.gradle中添加如下代码:
android {
....
dataBinding {
enabled = true
}
}
注: 如果一个app module的依赖库中使用了data binding,那么该module必须在build.gradle中配置data binding
布局文件
参考官方文档,第一个data binding的布局文件示例如下:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
Data-binding布局文件和常规的布局文件有些微区别。它的根标签是layout,data元素和view根元素紧跟其后。其中view元素就是在non-binding布局文件中的根元素。
上例中data元素中的user变量,描述了一个在布局中会使用到的属性。layout中使用"@{}" 来对属性赋值,eg,示例中的TextView的文本被user的firstName属性赋值。
数据对象
可以采用以下两种写法。
第一种
// a plain-old Java object (POJO) for User:
public class User {
public final String firstName;
public final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
第二种
public class User {
private final String firstName;
private final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}
以上两种方法是等价的,布局文件中的表达式@{user.firstName} 将会访问第一种方法的firstName域以及第二种方法的getFirstName()方法。第二种方法中也可以firstName()方法来代替getFirstName()方法
绑定数据
默认情况下,将会根据布局文件的名称来生成绑定类,将名称转为Pascal命名法并以Binding结尾。示例中布局文件名为main_activity.xml,则生成类名为MainActivityBinding。该类中保存了布局属性 (e.g. the user variable)到布局Views的绑定关系,并了解如何对绑定表达式赋值。
最简单的创建绑定的方式如下,后续即可运行看绑定效果。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("Test", "User");
binding.setUser(user);
}
另一种绑定方法如下:
MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater());
如果在ListView或RecyclerView的适配器中使用data binding,可以使用以下两种方法:
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
后续会继续写博客介绍事件处理,敬请关注!