android data binding

使用 android 的数据绑定库,可以编写声明式布局,减少应用程序逻辑和布局之间的粘合代码。数据绑定库可以兼容到android 2.2。
数据绑定库要求使用 gradle 1.5 或者gradle更高的版本。数据绑定库目前还处于 beta 版本阶段,这意味着以后发布正式版的时候,使用方法可能发生比较大的修改。可惜目前只支持单向数据绑定(所以不想看了。。。,等支持双向了再说吧),只支持单向,写起来比用 ButterKnife + ButterKnifeZelezny 要麻烦。

使用步骤:
1. 开启数据绑定配置
2. 在 layout 文件中绑定数据
3. 在 java 代码中获取到绑定的数据对象,设置对象的数据

  • 开启数据绑定配置,在使用数据绑定的 app module 的 build.gradle 中添加下面代码片段
android {
    ....
    dataBinding {
        enabled = true
    }
}
  • 在 layout 文件中绑定数据,为了在 layout 文件中使用数据绑定,增加了新的标签 layout 和 data,根标签必须使用 layout。下面包含 data 元素和 view 的根元素。view元素就是未使用数据绑定前的 layout 文件。
<?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>

使用 < variable name=”user” type=”com.example.User”/> 声明一个变量 com.example.User 类型的变量 user。
使用@{user.lastName} 使用变量 user 的属性值。
User 类中的字段通常不会改变。比如下面两种情况

public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}
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;
   }
}
  • 获取绑定的数据对象,设置对象的数据,在 activity 中使用下面的代码设置绑定的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test", "User");
   binding.setUser(user);
}

参考:
https://developer.android.com/tools/data-binding/guide.html
https://github.com/LyndonChin/MasteringAndroidDataBinding

你可能感兴趣的:(android,数据,gradle,binding)