Data binding的使用(一)
官网地址:Google Android Data Binding Library
Demo地址:(https://github.com/zhangiqlin/DataBindingDemo)
1.准备工作
Data Binding是一个兼容库,支持到Android2.1以上,要使用 data binding 保证你的Gradle Plugin 在1.5版本或者高过1.5,如果低于就请更新你的Gradle Plugin,并且请确保你在你的Android SDK Manager里面已经更新下载了最新的且能够支持Data binding的兼容库(Support repository)
2.配置Gradle
现在不需要在build.gradle里面引用诸如
classpath 'com.android.databinding 这样的代码了,现在可以直接在build.gradle使用如下配置即可
android {
....
dataBinding {
enabled = true
}
}
使用Data binding
- 步骤一 编写Layout文件
Layout布局文件根布局更改为
<layout xmlns:android="http://schemas.android.com/apk/res/android">
其他布局还是和原来的一样,只是根布局的标签更改为<layout>
,例如
<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>...</data>
标签声明你需要使用的变量,如上 布局文件声明了一个名为user的变量,类型是一个对应在包com.example包里面的User对象,最好写全称(包名+类名)。
User.java
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;
}
}
在布局文件中使用对象的属性的时候应该这样使用 @{对象.属性}
就像下面这样:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
- 步骤2 Activity里面配置
由于我们使用了Data Binding,配置完Layout文件以后,会自动帮我们生成一个java文件,生成规则为layout文件名+Binding,比如activity_main对应生成的类文件名为ActivityMainBinding,我们要使用该类填充我们在xml文件重定义的数据 user 对象。如下:
@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);
}
我们应该使用DataBindingUtil.setContentView(this, R.layout.main_activity);
来加载我们的layout文件,不应该使用原来的setContentView,只有这样我们才能得到MainActivityBinding 对象,然后设置xml中定义的数据。
当然如果是ListView或者是RecyclerView 的Item要使用Data Binding还可以使用下面2种方式获取View
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
到这里,第一次使用Data Binding就可以正常的跑起来了,试试吧,不用再像以前那样,获取view的id,然后在去设置值,现在可以直接就在xml中引入该对象,直接设置对象的属性值。赶快试试吧。
接下来讲解如何绑定属性字段的值,当值发生变化的时候,xml绑定了该属性的值也会发生变化。
结束
代码很简单,没有留下Demo 按着步骤走就行了。
注意
运行的时候,如果出现什么方法找不到,什么的,多检查检查xml中是否配置错误,是否哪些地方写错了。