Datenbindungsbibliothek Teil von Android Jetpack
Die Datenbindung Library ist eine Support Library, mit der Sie UI-Komponenten in Ihren Layouts deklarativ und nicht programmatisch an Datenquellen in Ihrer App binden können.
Layouts werden häufig in Aktivitäten mit Code definiert, der UI-Framework-Methoden aufruft. Im folgenden Code wird beispielsweise findViewById() aufgerufen, um ein TextView-Widget zu finden und es an das Attribut userName der Variable viewModel zu binden:
Kotlin
findViewById<TextView>(R.id.sample_text).apply {
text = viewModel.userName
}
Java
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
Das folgende Beispiel zeigt, wie Sie mit der Datenbindung-Bibliothek dem Widget direkt in der Layoutdatei Text zuweisen. Dadurch ist es nicht mehr erforderlich, den oben gezeigten Java-Code aufzurufen. Beachten Sie die Verwendung der @{}-Syntax im Zuweisungsausdruck:
<TextView
android:text="@{viewmodel.userName}" />
Wenn Sie Komponenten in der Layoutdatei binden, können Sie viele UI-Framework-Aufrufe in Ihren Aktivitäten entfernen. Dadurch werden sie einfacher und leichter zu verwalten. Dies kann auch die Leistung Ihrer App verbessern und Speicherlecks und NullPointerExceptions verhindern.
Data Binding Library verwenden
Auf den folgenden Seiten erfahren Sie, wie Sie die Datenbindung-Bibliothek in Ihren Android-Apps verwenden.
- Jetzt loslegen
- Hier erfährst du, wie du deine Entwicklungsumgebung für die Arbeit mit der Data Binding Library vorbereitest, einschließlich der Unterstützung für Datenbindungscode in Android Studio.
Mit der Ausdruckssprache können Sie Ausdrücke schreiben, die Variablen mit den Ansichten im Layout verbinden. Die Datenbindung-Bibliothek generiert automatisch die Klassen, die zum Binden der Ansichten im Layout an Ihre Datenobjekte erforderlich sind. Die Bibliothek bietet Funktionen wie Importe, Variablen und Includes, die Sie in Ihren Layouts verwenden können.
Diese Funktionen der Bibliothek lassen sich nahtlos in Ihre vorhandenen Layouts einbinden.
Beispielsweise werden die Bindungsvariablen, die in Ausdrücken verwendet werden können, in einem data-Element definiert, das ein gleichgeordnetes Element des Stammelements des UI-Layouts ist.
Beide Elemente sind in ein layout-Tag eingeschlossen, wie im folgenden Beispiel gezeigt:
<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>
- Mit beobachtbaren Datenobjekten arbeiten
- Die Datenbindung-Bibliothek bietet Klassen und Methoden, um Daten auf Änderungen zu beobachten. Sie müssen sich keine Gedanken darüber machen, die Benutzeroberfläche zu aktualisieren, wenn sich die zugrunde liegende Datenquelle ändert. Sie können Ihre Variablen oder deren Eigenschaften beobachtbar machen. Mit der Bibliothek können Sie Objekte, Felder oder Sammlungen beobachtbar machen.
- Generierte Bindungsklassen
- Die Datenbindung-Bibliothek generiert Bindungsklassen, die für den Zugriff auf die Variablen und Ansichten des Layouts verwendet werden. Auf dieser Seite wird beschrieben, wie Sie generierte Bindungsklassen verwenden und anpassen.
- Bindungsadapter
Für jeden Layoutausdruck gibt es einen Bindungsadapter, der die Framework-Aufrufe ausführt, die zum Festlegen der entsprechenden Attribute oder Listener erforderlich sind. Der Binding-Adapter kann beispielsweise die Methode
setText()aufrufen, um das Textattribut festzulegen, oder die MethodesetOnClickListener()aufrufen, um dem Click-Event einen Listener hinzuzufügen. Die gängigsten Bindungsadapter, z. B. die Adapter für das Attributandroid:text, die in den Beispielen auf dieser Seite verwendet werden, sind im Paketandroid.databinding.adaptersverfügbar. Eine Liste der gängigen Bindungsadapter finden Sie unter Adapter. Sie können auch benutzerdefinierte Adapter erstellen, wie im folgenden Beispiel gezeigt:
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;
}
- Layoutansichten an Architekturkomponenten binden
- Die Android Support Library enthält die Architekturkomponenten, mit denen Sie robuste, testbare und wartbare Apps entwickeln können. Du kannst die Architekturkomponenten mit der Datenbindung-Programmbibliothek verwenden, um die Entwicklung deiner Benutzeroberfläche weiter zu vereinfachen.
- Zwei-Wege-Datenbindung
- Die Data Binding Library unterstützt die bidirektionale Datenbindung. Die für diese Art der Bindung verwendete Notation unterstützt die Möglichkeit, Datenänderungen an einer Property zu empfangen und gleichzeitig auf Nutzeraktualisierungen dieser Property zu warten.
Zusätzliche Ressourcen
Weitere Informationen zur Datenbindung finden Sie in den folgenden zusätzlichen Ressourcen.
Beispiele
Codelabs
Blogposts
Empfehlungen für Sie
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Bindungsadapter
- Layouts und Bindungsausdrücke
- Generierte Bindungsklassen