Data Binding 系列(一)概覽

簡介

Data Binding 是一個支持庫,它使用一種 聲明的方式 代替 編碼的方式,用來綁定 UI 控件和數據源。android

一般咱們會在 activity 裏面調用 UI 框架層的方法聲明 view。例如,下面的代碼調用了 findViewById() 聲明瞭一個 TextView 控件,而且把它和 viewModeluserName 屬性進行了綁定:express

findViewById<TextView>(R.id.sample_text).apply {
    text = viewModel.userName
}
複製代碼

下面的代碼展現瞭如何使用 Data Binding 在佈局裏面直接給 TextViewtest 屬性進行賦值。這麼作的好處是沒必要再像上面的例子同樣調用 Java 代碼。注意在賦值表達式中使用的語法是 @{}架構

<TextView
    android:text="@{viewmodel.userName}" />
複製代碼

在佈局裏面直接綁定 UI 控件,能夠減小在 activity 中 UI 框架方法的調用,這使得代碼更加簡潔、更容易維護。它還能夠提高 App 的性能,避免內存泄漏和空指針異常。app

使用

會分下面幾個部分來展開介紹 Data Binding框架

1 環境準備

介紹瞭如何準備 Data Binding 的開發環境。less

2 佈局和綁定表達式(binding expression

綁定表達式的使用創建了 view 和變量之間的聯繫。Data Binding 會自動生成一些類用於綁定 view 和 數據。它提供了諸如 importsvariablesincludes 等在佈局中能夠直接使用的特性。佈局

這些特性能夠和現有的佈局很好地共存。好比,能夠在綁定表達式中直接使用的變量是定義在 data 元素標籤中的,data 元素標籤是和佈局的根元素標籤同級的。它們都是 layout 標籤的子元素,以下所示:post

<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable name="viewmodel" type="com.myapp.data.ViewModel" />
    </data>
    <ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
複製代碼

3 可觀察的數據(observable data

Data Binding 提供了一些類和方法使得觀察數據的變化變得很簡單。你大可沒必要擔憂數據變化時刷新 UI 的問題。它提供了使對象、字段、集合變得可觀察的方法。性能

4 生成綁定類(binding class

Data Binding 自動生成了一些類用來訪問佈局變量和 view。這一章會向你展現如何使用和自定義這些生成的綁定類。編碼

5 綁定適配器(binding adapter

對於每個綁定表達式,都會有相應的綁定適配器調用框架的方法去設置對應的屬性或者監聽器。好比,綁定適配器會調用 setText() 方法去設置 text 屬性,或者調用 setOnClickListener() 方法去設置監聽器。經常使用的一些綁定適配器,好比示例中用於 android:text 屬性的綁定適配器,定義在 android.databinding.adapters 包中。你也能夠自定義適配器,以下所示:

@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
    view.visibility = if (visible) View.VISIBLE else View.GONE
}
複製代碼

6 綁定 view 和其餘架構組件

使用 Data binding 還能夠將 view 和其餘架構組件綁定,從而簡化 UI 的開發。

7 雙向數據綁定(two-way data binding

Data binding 支持雙向數據綁定。既能夠數據變化刷新 view,也能夠 view 刷新更新數據。

相關文章
相關標籤/搜索