Android中数据双向绑定
Data Binding双向数据绑定是实现了ui跟数据绑定的框架,是实现了MVVM模式的工具,有个Data Binding我们可以更好的使用MVVM模式来开发框架。 我们之前也使用过一些框架实现过,像ButterKnife、kubernetes Annotations和RoboBinding框架都实现了view绑定,减少findViewById的使用。 它的主要优势是去除了Activity和Fragment的大量ui代码,性能超过手写代码,而且安全性很好,代码也能保证在主线程中执行。不足的是IDE支持不是很完善,报错信息不明显,重构也不是很好。那么如何使用DataBinding呢?
1. 在build.gradle文件的android中添加以下代码。
android {
....
dataBinding {
enabled = true
}
}
1
2
3
4
5
6
2
3
4
5
6
2. 在你的布局文件中根布局外面加上layout布局,示例如下:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.codeteenager.databindingdemo.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
layout中有一个data标签用来定义属性供layout使用,如上图所示Variable中定义一个名为user的属性,type代表你这个属性的类型。当你定义完成后,你可以在TextView中使用这个属性了,如上图的android:text="@{user.firstName}"。User类代码如下:
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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
当你布局文件定义好之后,编译一下,系统会自动给你生成一个类。例如activity_main.xml->ActivityMainBinding然后你可以在activity中通过DataBindingUtil.setContentView(this, R.layout.activity_main);给activity设置布局并赋值给ActivityMainBinding。然后再设置给绑定的布局。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user=new User("用户名","密码");
activityMainBinding.setUser(user);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
接下来你就可以看到效果了。