为什么要使用data binding
google说它可以最小化业务代码和UI之间的工作量,事实上也确实如此,它的原理是在xml中写UI代码,对view的属性进行表达式求值实现动态数据。
配置要求
- Android 2.1 (API level 7+)
- gradle plugin 1.5+
- Android Studio 1.3 +
导入项目
在app module的build.gradle中加入
dataBinding {
enabled = true
}
注:如果有其他模块使用了dataBinding,那么在app module中也同样要加入。
基本使用
使用一个简单例子来了解基本使用方法,例子是绑定数据到view上面显示。
1.修改布局文件
为用于数据绑定的布局文件和通常的不一样,它需要用layout节点作为根节点,并且后面紧跟data节点
<!-- 根节点是layout -->
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 紧跟data -->
<data>
<!-- 定义一个在布局文件中可以访问的对像user,它的类型是User -->
<variable
name="user"
type="com.heyy.databingexample.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 使用@{user.name}来访问User对像中的name信息 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.name}"/>
</LinearLayout>
</layout>
2.定义数据对像类型
对应布局文件中定义的variable,实现数据对像类型User。
view有三种从数据对像中获取数据的方法,如下:
public class User {
public final String name; //优先级第三,直接使用属性名
public User(String name) {
this.name = name;
}
//优先级第一,get方法
public String getName() {
return "0"+name;
}
//优先级第二,属性名方法
public String name(){
return "1"+name;
}
}
3.绑定数据到view
这个简单点直接在onCreate中绑定就好了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//这里删除了原来的setContentView方法,使用了新的方法
//DataBindingUtil.setContentView创建了一个ViewDataBinding,后面可以用来设置数据
//ActivityMainBinding是自动生成的,命名规则和xml名称有关系,比如activity_main.xml会产生ActivityMainBinding
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
//创建一个数据
User user = new User("he");
//将数据绑定到view
activityMainBinding.setUser(user);
}
编译错误
如果项目中出现如下错误:
Error:(7, 47) error: package com.heyy.databindingexample.databinding does not exist
那么需要检查一下是否使用了android-apt插件,如果使用了请确保版本在1.5+