版權聲明:本文為部落客原創文章,歡迎大家轉載!
但是轉載請标明出處: 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 例子