跳到正文
Pollex's blog
返回

Data Binding文档翻译

目录

本文档讲解了怎样使用Data Binding库来声明布局,并且减少应用程序逻辑和布局所需的耦合代码,这在开发中是非常必要的。

       Data Binding库是一个引用库,兼容性非常好,适配了Android 2.1以上(API level 7+)的所有版本。

       使用Data Binding的话,Gradle 版本需要在1.5.0-alpha1及以上。

一、编译环境

使用Data Binding之前,需要先在Android SDK Manager的中下载Data Binding库。

然后在build.gradle中加入dataBinding的配置。

用下面的代码配置Data Binding:

android {
    ....
    dataBinding {
        enabled = true
    }
}

如果你的Module中已经有一个library引用了Data Binding,你的主项目的build.gradle中仍然需要配置一下。

然后确认一下Android Studio版本是否支持,Android Studio 1.3及以上都支持data binding,描述文档

二、Data Binding 布局文件

马上来编写你的第一个data binding程序吧!

data binding的布局文件和原先xml写的布局文件有略微不同,首先要在根布局下面绑定一个data元素,这个视图元素是在非绑定布局文件中的基本元素(好拗口~)。例子如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <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>

user变量是在数据中描述了,可以用在布局文件中。

<variable name="user" type="com.example.User"/>

在布局的属性中的语法是”@{}”,然后这个TextView的text属性就被user的fitstName字段赋值了。

<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@{user.firstName}"/>

三、数据结构

现在我们假定,你有一个纯java对象(POJO),User:

public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

这个类型的对象含有永不变化的数据,在程序中,一次读取,后来从不改变的现象,在程序中很常见,另外也可以使用一个javabean对象:

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;
   }
}

从data binding的角度出发,这两个类是相当的,在给一个android:text属性用@{user.firstName}这种写法赋值的时候,在前一个类里面被理解为firstName字段,在后一个类里面被理解为getFirstName()方法,或者也有可能被理解为firstName()方法,如果存在的话。

绑定数据

一个数据绑定的类默认会依据layout文件的名字来创建,

(未完待续)


分享这篇文章:

上一篇
Data Binding Library官方文档
下一篇
我有特殊的开发技巧