第一次写博客,废话不多说,直接进入正题
1)介绍
Data Binding即数据绑定,Data Binding 库实现在布局文件中实现数据绑定申明,使数据的变化引起视图的自动更新,减少了逻辑代码,在Android中可以很方便的实现MVVM的开发模式。
这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件。
Data Binding库不仅灵活而且广泛兼容- 它是一个support库,因此你可以在所有的Android平台最低能到Android 2.1(API等级7+)上使用它。
2)构建环境
Data Binding 插件需要Gradle 1.3以上及Android Studio 1.3.
你的app要使用Data Binding,需要添加Data Binding到gradle构建文件里,如下:
android {
dataBinding {
enabled = true
}
}
3)Data Binding Layout文件
Data Binding layout文件有点不同的是:起始根标签是layout,接下来一个data元素以及一个view的根元素。这个view元素就是你没有使用Data Binding的layout文件的根元素。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<!--name 自行命名即可,最好具有实际意义-->
<variable name="userInfo"
<!--type 对应com.zero.databindingtest 下的 UserInfo 实体类-->
type="com.zero.databindingtest.UserInfo">
</variable>
</data>
<LinearLayout
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.zero.databindingtest.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{userInfo.userName}"/><!-- 实现数据的绑定-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="@{userInfo.userTel}"/><!-- 实现数据的绑定-->
</LinearLayout>
</layout>
在data节点里面的variable声明实现数据与UI的绑定,变量为UI提供数据,通过@{ } 可以直接把Java 中定义的属性赋值给UI:@{userInfo.userName}
数据对象
任何Java对象对象(POJO)可以做数据绑定。
public class UserInfo {
private String userName;
private String userTel;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserTel() {
return userTel;
}
public void setUserTel(String userTel) {
this.userTel = userTel;
}
}
4)绑定数据
默认情况下,一个绑定类会根据布局文件的名称生成一个绑定类,下面代码就是activity_main.xml生成的类ActivityMainBinding.(生成类名字规则:布局文件去掉下划线首字母大写+Binding)这个类持有所有从布局文件中的View对应的属性(例如:user变量),并且知道如何指派变量值到绑定的表达式中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
UserInfo info = new UserInfo();
info.setUserName("LILei");
info.setUserTel("13888888888");
binding.setUserInfo(info);
}
5)运行结果
数据已经成功绑定到对应textview上了
更多关于Data Binding 高级使用请见后续更新