Data Binding 解决了 Android UI 编程的一个痛点,官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性。Data Binding 的最大的好处就是Android开发者可以像前端开发那样直接在View中绑定数据,避免了代码的重复和繁琐。言归正传,下面带领大家使用Data Binding。
准备
新建一个Project,保证Android 的 Gradle 插件版本不低于 1.5.0-alpha1:
classpath 'com.android.tools.build:gradle:3.0.1'
然后修改对应模块的build.gradle:
dataBinding{
enabled = true
}
修改好的build.gradle如下图所示:
布局文件
使用 Data Binding 之后,xml 的布局文件就不再用于单纯地展示 UI 元素,还需要定义 UI 元素用到的变量。所以,它的根节点不再是一个 ViewGroup,而是变成了 layout,并且新增了一个节点 data。
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
</data>
<ConstraintLayout>
....
</ConstraintLayout>
</layout>
数据对象
定义一个Bean
public class UserBean {
private String name;
private int age;
public UserBean(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
定义 Variable
我们将在xml中去绑定刚刚定义的Bean
<data>
<variable
name="UserBean"
type="com.zhangl.data.UserBean">
</variable>
</data>
定义的TextView中text=@{UserBean.name}
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:text="@{UserBean.name}"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
这样就将UserBean中的name和TextView绑定起来。
Activity中实现
ActivityMainBinding mainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
UserBean userBean = new UserBean("zhangl",24);
mainBinding.setUserBean(userBean);
可以看到,已经将数据显示显示在activity中。
文末附上github地址:https://github.com/zhanglu1994/DataBinding