1.新建工程。要使用DataBinding,要求Android 的Gradle插件版本不低于 1.5.0-alpha1:
classpath 'com.android.tools.build:gradle:1.5.0'
2.在Module的 build.gradle的android{ ... }里增加一个插件:
dataBinding{ enabled true }
3.添加一个数据对象。以User类为例,User.java内容为:
public class User { private String name; private int age; public User(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; } }4.布局文件。
4.1必须以<layout>为顶层视图,其他视图都要放在<layout>里。命名空间也写在<layout>里。
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" /> </RelativeLayout> </layout>4.2现在开始定义变量。方法是在<layout>下,添加一对<Data></Data>标签,在此标签内,定义一个变量。
<data> <variable name="user" type="com.example.coder.myapplicationdatabinding.User" /> </data>其中name="user",是我们为这个变量取的名,在此布局文件中可以用这个名字代表type中所定义的类。type="...",要写全名。
4.3修改需要用到User的控件。例如:在<TextView>里显示User类的name.只需要把android:text="Hello World"改成:
android:text="@{ user.name }" />完整的布局文件内容为:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data><variable name="user" type="com.example.coder.myapplicationdatabinding.User" /></data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{ user.name }" /> </RelativeLayout> </layout>5.终于来到最后一步,绑定变量。
在不使用 DataBinding的情况下,接下来要做的就是修改Activity的onCreate()方法,先后用setContentView()、findViewById()、settext()等方法逐个获取控件ID、设置控件内容。现在使用DataBinding就不用这么烦琐。在上一步布局文件设置完成后,我们刚才在 build.gradle 中添加的那个插件-com.android.databinding 会根据 xml 文件的名称 Generate 一个继承自 ViewDataBinding 的类。 当然,IDE 中看不到这个文件,需要手动去 build 目录下找(工程名\app\build\intermediates\data-binding-layout-out\debug\layout)。例如,这里 xml 的文件名叫 activity_main.xml,那么生成的类就是ActivityMainBinding。
现在正式开始修改代码,只需增加2行。转到布局文件对应的Activity.java文件,用DataBindingUtil()方法替换掉setContentView()方法,其返回值为上面提到的自动生成的ActivityMainBinding类的一个实例;对返回的实例进行初始化设置。代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setUser(new User("张",20)); }注意:自动生成的这个类,其实不一定要到build下寻找,它的命名是很有规律的,基本上是和布局文件名相同的,只需要打几个字母就能在Android Studio的提示里找到。这个类是自动生成的,同时这个类还会生成set方法,方法名则是根据variable名称生成的。在布局文件中定义了一个name="user",这个类就会生成setUser()方法,其参数必须为type="..."所规定的类型。我们在Activity中就可以利用这个方法对控件进行绑定。
完毕,可以编译运行了。关于DataBinding的高级用法还很多,以后慢慢体会。
参考资料:https://github.com/LyndonChin/MasteringAndroidDataBinding