Android 官方資料繫結 Data Binding Library

weixin_34320159發表於2016-09-26

DataBinding 支援 Android 2.1 (API level 7+)
並且 Gradle 1.5.0-alpha1 以上
以上條件毫無疑問不用考慮了,如果有不滿足條件的請自行百度。廢話不多說直接上實戰

構建環境

在你的對應Module中的 build.gradle檔案中新增,然後Rebuild Project就可使用DataBinding了

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


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:id="@+id/name"
           android:text="@{user.firstName}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.lastName}"/>
   </LinearLayout>
</layout>

使用dataBinding後根佈局就需要改成layout,然後在

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

最後再在Activity的onCreate中

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

至此即實現了顯示繫結

雙向繫結

只需要在@後面加一個=即可

 <TextView android:text="@={user.lastName}"/>

獲取view

DataBinding.id即可獲取view,且自動識別型別

   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
    binding.user
Object 物件
/**
 * Created by cheng on 2016/9/26.
 */
public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

還有跟多用法請參看Android 官方文件
https://developer.android.com/topic/libraries/data-binding/index.html?hl=zh-cn#data_binding_layout_files
dataBinding特性

  • 支援雙向繫結
  • 支援繫結Listener 事件
  • 支援繫結方法
  • 支援繫結屬性
  • 支援直接獲取View 免使用findViewById
    等等其他特性

相關文章