1. 程式人生 > 其它 >【Android】Jetpack的Data Binding庫

【Android】Jetpack的Data Binding庫

技術標籤:筆記

Data Binding庫支援使用宣告性格式而不是以程式設計方式將layout中的UI元件繫結到應用程式中的資料來源。

我們通常在Activity中宣告layout,並通過UI框架方法獲取到UI控制元件。例如,下面程式碼演示呼叫findViewById()去獲取TextView控制元件,然後將它繫結到viewModel的userName。

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

接下來的例子演示使用Data Binding庫直接在layout檔案中為TextView指定需要顯示的文字。這樣就不需要呼叫上面例子的Java程式碼。請注意在賦值表示式中使用@{}語法:

<TextView
    android:text="@{viewmodel.userName}" 
    />

通過在layout檔案中繫結控制元件可以讓你在Activity中移除很多UI框架方法的呼叫,使它們更簡單,更容易維護。這樣還可以提高你的應用程式的效能,並有助於防止記憶體洩漏和空指標異常。

使用Data Binding庫
下面介紹如何在Android程式中使用Data Binding庫。

開始
瞭解如何配置開發環境以支援使用Data Binding庫,包括支援Android Studio中的Data Binding程式碼。

Layouts和Binding表示式


表示式語言允許你在layout檔案中編寫表示式連線變數和檢視。Data Binding庫自動生成將layout中的檢視與資料物件繫結所需的類。該庫提供了可在layout中使用的匯入,變數和包含等功能。

庫的這些特性可以與現有佈局完美共存。例如,可以在表示式中使用的繫結變數是在資料元素內部定義的,該data元素是UI佈局的根元素的兄弟。這兩個元素都包含在layout標記中,如以下示例所示:

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

使用可觀察的資料物件
Data Binding庫提供類和方法,可以很容易地觀察資料以進行更改。當基礎資料來源發生改變時,你不需要擔心重新整理UI。你可以讓你的變數或者它們的屬性可觀察。該庫允許您使物件,欄位或集合可觀察。

生成繫結類
Data Binding庫生成用於訪問佈局的變數和檢視的繫結類。此頁面顯示如何使用和自定義生成的繫結類。

繫結的介面卡
對於每個佈局表示式,有一個繫結的介面卡,它使得設定相應屬性或監聽器給所需的框架呼叫。例如,繫結的介面卡可以負責呼叫setText()方法來設定text屬性或呼叫setOnClickListener()方法來為click事件新增一個監聽器。最常見的繫結介面卡,例如本頁示例中使用的android:text屬性的介面卡,可以在android.databinding.adapters包中使用。有關常用繫結介面卡的列表,請參閱介面卡。您還可以建立自定義介面卡,如以下示例所示:

@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
    view.visibility = visible ? View.VISIBLE : View.GONE;
}