Android Data Binding
Lassen Sie uns sehen, wie Sie Ihre Entwicklungsumgebung bereit machen, um mit der Data Binding Library zu arbeiten, einschließlich der Unterstützung für Data-Binding-Code in Android Studio.
Schritt 1. Aktivieren der Datenbindung:
Um die Datenbindung in unserem Projekt zu verwenden, müssen wir sie in der build.gradle-Datei auf App-Ebene aktivieren.
dataBinding {
enabled = true
}
Schritt 2. Ändern Sie die Layout-Datei so, dass sie mit Datenbindung verwendet werden kann:
Die Ausdruckssprache ermöglicht es Ihnen, Ausdrücke zu schreiben, die Variablen mit den Ansichten im Layout verbinden. Die Datenbindungsbibliothek generiert automatisch die Klassen, die erforderlich sind, um die Ansichten im Layout mit Ihren Datenobjekten zu verbinden. Die Bibliothek bietet Funktionen wie Importe, Variablen und Includes, die Sie in Ihren Layouts verwenden können.
Damit das Layout die Datenbindung nutzen kann, sollte die oberste Ansicht im Layout die <Layout>-Ansicht sein, oder anders ausgedrückt, wir müssen das gesamte Layout in das <Layout>-Tag wie folgt einpacken:
<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Für die Verwendung von Daten aus anderen Klassen oder Objekten müssen wir ein Datenobjekt innerhalb der Layout-Datei erstellen und die Variable dieser Klasse oder dieses Objekts darin deklarieren.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Um Fehler zu vermeiden, sollten alle Paketnamen mit einem Kleinbuchstaben und alle Namen der Datenklassen mit einem Großbuchstaben beginnen.
Schritt 3. Erstellen eines Bindungsobjekts in der Aktivität/dem Fragment:
Jetzt ist es an der Zeit, unser Layout mit der Aktivität/dem Fragment zu verbinden, indem wir die Datenbindung verwenden.
Erstellen eines Bindungsobjekts in der Datei:
Der Typ der Bindung wird vom Namen der Layoutdatei abgeleitet. z.B. wenn der Name der Layoutdatei activity_main.xml, dann wird Data-Binding eine Klasse namens ActivityMainBinding erstellen und diese Datei wird alle erforderlichen Eigenschaften und Funktionen enthalten.
private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding
Initialisieren Sie die Bindungsvariable in der onCreate()-Methode:
Nun müssen wir die Bindung initialisieren und die bestehende setContentView ()-Methode ersetzen. Dies kann entweder durch den Aufruf der Klasse DataBindingUtil oder durch die direkte Verwendung des Bindungstyps erfolgen.
Für Aktivitäten kann der Bindungstyp nicht verwendet werden.
//for activity (in onCreate())
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)//for fragment (in onCreateView())
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false)orbinding = FragmentGameBinding.inflate(inflater)
Schritt 4. Verwenden Sie das Bindungsobjekt:
Jetzt können wir die von uns erstellte Bindung für zwei Zwecke verwenden:
- Ersetzen Sie alle Aufrufe von findViewById oder nur die synthetischen Importe durch die Bindung.<View’s id>.
e.Wenn es z.B. im Layout eine Textansicht mit der ID sample_text gibt, müssen wir diese auf eine der beiden angegebenen Arten verwenden
findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"
Jetzt wird sie durch
binding.sampleText.text = "dummy_text"
ersetzt.
Beachten Sie, dass der Eigenschaftsname in der Bindungsklasse nur die Großbuchstabenform der ID der Ansicht ist.
z.B. wird sample_text zu sampleText
2. Die im Datenobjekt deklarierte Variable im Layout setzen und dann in der Layoutdatei verwenden.
Wenn die Layoutdatei eine Variable mit dem Namen „user“
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
hat, dann müssen wir diese in activity/fragment setzen
binding.user = User()
Und nun können wir diese für das Auffüllen der Daten der Ansichten verwenden.
Wenn es z.B. eine Textansicht gibt, die den Namen des Benutzers anzeigt, dann können wir die @{}-Syntax verwenden, um den Wert zu setzen.
<TextView
...
android:text="@{user.userName}"
...
/>
Auf diese Weise können wir eine Menge Code vermeiden, um Ansichten programmatisch zu setzen und die Datenbindung darum kümmern lassen.
Leave a Reply