Data Binding basiert auf der Idee, Daten aus einem regulären Java- oder Kotlin-Objekt zu verwenden, um Attribute in Ihren Layouts
zu setzen. Und das ist auch das Ausmaß, in dem die meisten Leute es verwenden.
Das ist großartig, weil es Ihnen erlaubt, Ihre Ansichtslogik unabhängig vom Android-Framework zu definieren.
Was aber, wenn Ihre Ansicht Attribute für Ihr Objekt festlegen muss?
Zum Beispiel, wenn ich einen Text bearbeiten und ich möchte die Daten aus diesem Text bearbeiten, wie ich es mit der Datenbindung
Bibliothek verwenden können.
Hier kommt die Zwei-Wege-Datenbindung ins Spiel, die wir in diesem Video kennenlernen werden.
Die bidirektionale Datenbindung ist eine Technik zur Bindung Ihrer Objekte an Ihre XML-Layouts, so dass das
Layout Daten an Ihr Bindungsobjekt senden kann.
Dies ist im Vergleich zu einer traditionellen oder Einweg-Datenbindung Setup, dass wir zuvor gelernt, wo Daten
nur von Ihrem Bindung Objekt zu ihrem Layout bewegen würde.
Zum besseren Verständnis der zweiseitigen Bindung werde ich eine neue Textbearbeitung und eine Textansicht erstellen.
Ich ziehe sie hierher und leite die Einschränkungen ab.
Dann erstelle ich einen Bearbeitungstext.
Ich ziehe es hierher und leite daraus die Einschränkungen ab, die ich von Ihnen haben möchte, um zu
verstehen, wie man diesen Text mit der Textansicht in der Zwei-Wege-Bindungstechnik verknüpft.
Diese Technik der bidirektionalen Bindung ermöglicht es Ihnen also, UI-Elemente automatisch zu aktualisieren, wenn sich die zugrunde liegenden
Daten ändern und umgekehrt.
Wenn der Benutzer zum Beispiel seinen Namen hier eingibt, wird diese Textansicht automatisch geändert, so dass die vom
Benutzer in der Benutzeroberfläche vorgenommenen Änderungen in der Datenquelle wiedergegeben werden.
Ohne expliziten Code für diese Aktualisierungen zu schreiben, nehmen wir an, dass wir hier den Namen der Person eingeben müssen.
Ich verwende also diese Variable namens Person, die wir zuvor im Datenelement erstellt haben, und setze sie sowohl für die Textansicht
als auch für die Textbearbeitung ein.
Hier muss ich also bei geschweiften Klammern Person Punktname verwenden.
Außerdem muss ich diesen Text bearbeiten und mit dem Text bei der Personenvariablen Punktname beginnen.
Ich muss den Namen hier und den Namen hier anzeigen.
Der zweite Schritt ist der Wechsel zur Datenquelle, die in diesem Fall die Personenklasse in der Zweiwege-Datenbindungstechnik
ist.
Ich muss die Observable-Basisklasse erweitern.
Das Erweitern von Base Observable ist nicht unbedingt erforderlich, kann aber nützlich sein, um automatische Benachrichtigungen über Eigenschaftsänderungen
zu implementieren, insbesondere wenn Sie die Add Bindable-Annotation und benutzerdefinierte Getter und Setter für Eigenschaften in Ihrem
ViewModel oder Ihrer Datenquelle verwenden.
In diesem Fall ist die Datenquelle die Personenklasse und die Erweiterung von Base Observable bietet die Methode
notify property change, mit der Sie die Datenbindungsbibliothek benachrichtigen können, wenn sich eine Eigenschaft geändert hat.
Dies ist wichtig, damit die Bibliothek die Elemente der Benutzeroberfläche automatisch aktualisieren kann, wenn sich die zugrunde liegenden Daten ändern.
Dafür werde ich diese Methode Notify property changed in der Methode Setname notify property change verwenden
und ich muss B-R verwenden.
Dies ist aus der Datenbindungsbibliothek dot name.
Die Methode notify property changed wird also in der Datenbindungsbibliothek von Android verwendet, um der Bibliothek mitzuteilen,
dass eine bestimmte Eigenschaft ihren Wert geändert hat.
Die Benachrichtigung ist für die bidirektionale Datenbindung von entscheidender Bedeutung, da sie die Bibliothek darüber informiert, alle an diese Eigenschaft
gebundenen UI-Elemente zu aktualisieren.
Und diese Methode wird von Base Observable bereitgestellt.
Wir erweitern also base observable, um Zugriff auf diese Methode zu erhalten. B steht für binding resources und ist eine von der Datenbindungsbibliothek
generierte Klasse.
Diese Klasse enthält konstante ganzzahlige Werte, die mit jeder der bindbaren Eigenschaften in Ihrer Datenquelle verbunden
sind.
Mit anderen Worten, es gibt eine Konstante für jede Eigenschaft, die Sie als bindungsfähig markiert haben, und Sie können sehen, dass es den Namen
nicht finden kann, denn wenn ich nach oben gehe, kann ich keine bindungsfähige Anmerkung sehen.
Um diesen Fehler zu beheben, füge ich hier vor der getName-Methode eine bindable-Annotation ein. Die Bindable-Annotation wird verwendet,
um den Benutzernamen hier als beobachtbare Eigenschaft zu kennzeichnen, die der Datenbindung mitteilt, dass sie den erforderlichen Code
zur Beobachtung von Änderungen generieren soll.
Um zusammenzufassen, was wir zuvor getan haben, habe ich diese Datenquelle Person Klasse erweitern Basis observable, um
den Zugriff auf die Eigenschaft geändert Methode und diese Methode, die ich hier übergeben werden Bindungsressourcen Punkt Name und
dieser Name bezieht sich auf jede bindungsfähige Eigenschaft, und in diesem Fall bin ich sagen, Datenbindung, dass der Name Eigenschaft
hat seinen Wert geändert und sagen Datenbindung, um den notwendigen Code, um Änderungen zu beobachten erzeugen.
Wechseln wir nun zur Hauptaktivität, und hier muss ich die zweiseitige Bindung festlegen.
Aber, da wir es vorher getan haben, muss ich eine Tätigkeit Hauptbindung erstellen und sie und Tätigkeit Hauptbindung Punkt gesetzte
Person zu p eins initialisieren.
Ich setze zunächst die Personenbuchse und kann diesen Text bearbeiten und die Änderungen in der Textansicht anzeigen.
Los geht's.
Sie brauchen hier also nichts zu schreiben und können sehen, dass ich diese Textansicht habe, die alte Textansicht.
Ich habe eine neue Textansicht mit dem Namen Jack, und das ist der zu bearbeitende Text.
Hier ist Jack.
Ich muss es ändern und zum Beispiel John eingeben. Wie Sie sehen, gibt es einen Fehler.
John Value wird nicht aktualisiert, so dass Jack weiterhin bestehen bleibt.
Dies ist ein Fehler, den viele Entwickler machen.
Es gibt hier also einen sehr wichtigen Trick in der Syntax des zu bearbeitenden Textes.
Mit diesem Gleichheitszeichen ist das Problem also gelöst.
In der Datenbindungsbibliothek von Android wird die Syntax des Gleichheitszeichens in geschweiften Klammern verwendet, um eine bidirektionale Datenbindung
zu ermöglichen.
Es ermöglicht einen bidirektionalen Datenfluss zwischen einem UI-Element und der Datenquelle, in der Regel einem ViewModel.
Später werden wir über Viewmodels mit bidirektionaler Datenbindung sprechen. Änderungen am UI-Element aktualisieren automatisch die
Datenquelle und die an der Datenquelle vorgenommenen Änderungen.
Aktualisieren Sie das UI-Element automatisch, also verpassen Sie nicht, diese Syntax zu verwenden, wenn Sie mit dem Bearbeiten
von Texten arbeiten, und Sie können sehen, wenn ich John eingebe, dass er die Textansicht automatisch aktualisiert.
Selbst wenn ich den Text entferne, können Sie sehen, dass ich diesen Text aktualisiere, was wiederum die Textansicht und diese andere
Textansicht aktualisiert.
Dies ist die zweiseitige Bindung in Android.