天天看點

Android Architecture Component Data Binding Library (一) 概要

版權聲明:本文為部落客原創文章,歡迎大家轉載!

但是轉載請标明出處: https://blog.csdn.net/t000818/article/details/84580412,本文出自:【唐宏宇的部落格】 

Data Binding 庫是可以讓我們使用聲明性格式而不是以程式設計方式将布局中的UI元件綁定到應用中。

布局在activities中的定義方式,通常是調用UI架構方法。例如,下面的代碼調用findViewById()來查找TextView小部件并将其綁定到viewModel變量的userName屬性。

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

Java寫法:

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

以下示例顯示如何使用Data Binding庫直接在布局檔案中為widget指定文本值。這樣不需要顯示調用任何Java代碼。注意使用

指派表達式中的{}文法:

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

布局檔案中的綁定元件的方式,可以讓我們在activities中不需要使用UI架構方法調用,使其更簡單,更易于維護。這還可以提高應用程式的性能,并有助于防止記憶體洩漏和空指針異常。

內建Data Binding 庫

開始吧

該連結将介紹如何在Android應用中使用資料綁定庫。

了解如何讓你的開發環境随時可以使用資料綁定庫,包括支援Android Studio中的資料綁定代碼。

布局和綁定表達式

表達式語言允許我們編寫表達式将變量連接配接到布局中的View。Data Binding庫會自動生成将布局中的View與資料對象綁定的類。

該庫提供了可在布局中使用的import,variable和includes等功能。

Data Binding庫的這些功能與現有的布局無縫共存。例如,可以在<data>标記内的表達式中使用的已綁定variable變量,該<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庫允許可以觀察對象,字段或集合。

生成的綁定類

Data Binding庫生成用于通路布局中variable和View的綁定類。該連結會示範如何使用和自定義生成的綁定類。

綁定擴充卡

對于每個布局表達式,都有一個綁定擴充卡,它可以讓架構調用并設定相應屬性或偵聽器。例如,綁定擴充卡可以負責調用setText()方法來設定text屬性或調用setOnClickListener()方法來為click事件添加一個監聽器。最常見的綁定擴充卡,例如本頁示例中使用的android:text屬性的擴充卡,可供在android.databinding.adapters包中使用。有關常用綁定擴充卡的清單,請參閱擴充卡。我們還可以建立自定義擴充卡,如以下示例所示:

Kotlin寫法:

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

Java寫法:

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

将布局視圖綁定到架構元件

Android支援庫中的架構元件,可以使用它來設計健壯,可測試和可維護的應用程式。可以将架構元件與資料綁定庫一起使用,以進一步簡化UI的開發。

雙向資料綁定

資料綁定庫支援雙向資料綁定。這種綁定方式支援接收屬性的資料變更并同時偵聽對該屬性的更新。

附加資源

請看Github上的Android Data Binding 例子

繼續閱讀