WEBVTT

00:00.080 --> 00:08.930
Data Binding basiert auf der Idee, Daten aus einem regulären Java- oder Kotlin-Objekt zu verwenden, um Attribute in Ihren Layouts

00:08.930 --> 00:14.090
zu setzen. Und das ist auch das Ausmaß, in dem die meisten Leute es verwenden.

00:14.090 --> 00:21.830
Das ist großartig, weil es Ihnen erlaubt, Ihre Ansichtslogik unabhängig vom Android-Framework zu definieren.

00:21.830 --> 00:27.710
Was aber, wenn Ihre Ansicht Attribute für Ihr Objekt festlegen muss?

00:27.710 --> 00:35.300
Zum Beispiel, wenn ich einen Text bearbeiten und ich möchte die Daten aus diesem Text bearbeiten, wie ich es mit der Datenbindung

00:35.300 --> 00:37.340
Bibliothek verwenden können.

00:37.340 --> 00:44.260
Hier kommt die Zwei-Wege-Datenbindung ins Spiel, die wir in diesem Video kennenlernen werden.

00:44.270 --> 00:52.460
Die bidirektionale Datenbindung ist eine Technik zur Bindung Ihrer Objekte an Ihre XML-Layouts, so dass das

00:52.490 --> 00:56.150
Layout Daten an Ihr Bindungsobjekt senden kann.

00:56.150 --> 01:03.810
Dies ist im Vergleich zu einer traditionellen oder Einweg-Datenbindung Setup, dass wir zuvor gelernt, wo Daten

01:03.810 --> 01:08.130
nur von Ihrem Bindung Objekt zu ihrem Layout bewegen würde.

01:08.130 --> 01:15.840
Zum besseren Verständnis der zweiseitigen Bindung werde ich eine neue Textbearbeitung und eine Textansicht erstellen.

01:22.210 --> 01:26.010
Ich ziehe sie hierher und leite die Einschränkungen ab.

01:26.020 --> 01:29.050
Dann erstelle ich einen Bearbeitungstext.

01:31.960 --> 01:38.680
Ich ziehe es hierher und leite daraus die Einschränkungen ab, die ich von Ihnen haben möchte, um zu

01:38.680 --> 01:45.760
verstehen, wie man diesen Text mit der Textansicht in der Zwei-Wege-Bindungstechnik verknüpft.

01:45.760 --> 01:53.890
Diese Technik der bidirektionalen Bindung ermöglicht es Ihnen also, UI-Elemente automatisch zu aktualisieren, wenn sich die zugrunde liegenden

01:53.890 --> 01:56.110
Daten ändern und umgekehrt.

01:56.110 --> 02:02.560
Wenn der Benutzer zum Beispiel seinen Namen hier eingibt, wird diese Textansicht automatisch geändert, so dass die vom

02:02.560 --> 02:08.560
Benutzer in der Benutzeroberfläche vorgenommenen Änderungen in der Datenquelle wiedergegeben werden.

02:08.560 --> 02:16.150
Ohne expliziten Code für diese Aktualisierungen zu schreiben, nehmen wir an, dass wir hier den Namen der Person eingeben müssen.

02:16.150 --> 02:24.490
Ich verwende also diese Variable namens Person, die wir zuvor im Datenelement erstellt haben, und setze sie sowohl für die Textansicht

02:24.490 --> 02:27.790
als auch für die Textbearbeitung ein.

02:27.790 --> 02:34.540
Hier muss ich also bei geschweiften Klammern Person Punktname verwenden.

02:34.540 --> 02:42.790
Außerdem muss ich diesen Text bearbeiten und mit dem Text bei der Personenvariablen Punktname beginnen.

02:42.820 --> 02:46.180
Ich muss den Namen hier und den Namen hier anzeigen.

02:46.210 --> 02:53.590
Der zweite Schritt ist der Wechsel zur Datenquelle, die in diesem Fall die Personenklasse in der Zweiwege-Datenbindungstechnik

02:53.620 --> 02:56.290
ist.

02:56.290 --> 03:00.790
Ich muss die Observable-Basisklasse erweitern.

03:00.790 --> 03:08.800
Das Erweitern von Base Observable ist nicht unbedingt erforderlich, kann aber nützlich sein, um automatische Benachrichtigungen über Eigenschaftsänderungen

03:08.800 --> 03:16.150
zu implementieren, insbesondere wenn Sie die Add Bindable-Annotation und benutzerdefinierte Getter und Setter für Eigenschaften in Ihrem

03:16.150 --> 03:19.210
ViewModel oder Ihrer Datenquelle verwenden.

03:19.210 --> 03:26.470
In diesem Fall ist die Datenquelle die Personenklasse und die Erweiterung von Base Observable bietet die Methode

03:26.500 --> 03:35.510
notify property change, mit der Sie die Datenbindungsbibliothek benachrichtigen können, wenn sich eine Eigenschaft geändert hat.

03:35.510 --> 03:42.170
Dies ist wichtig, damit die Bibliothek die Elemente der Benutzeroberfläche automatisch aktualisieren kann, wenn sich die zugrunde liegenden Daten ändern.

03:42.170 --> 03:50.480
Dafür werde ich diese Methode Notify property changed in der Methode Setname notify property change verwenden

03:50.480 --> 03:52.960
und ich muss B-R verwenden.

03:52.970 --> 03:57.470
Dies ist aus der Datenbindungsbibliothek dot name.

03:57.470 --> 04:04.820
Die Methode notify property changed wird also in der Datenbindungsbibliothek von Android verwendet, um der Bibliothek mitzuteilen,

04:04.820 --> 04:08.540
dass eine bestimmte Eigenschaft ihren Wert geändert hat.

04:08.570 --> 04:16.520
Die Benachrichtigung ist für die bidirektionale Datenbindung von entscheidender Bedeutung, da sie die Bibliothek darüber informiert, alle an diese Eigenschaft

04:16.550 --> 04:19.130
gebundenen UI-Elemente zu aktualisieren.

04:19.130 --> 04:22.970
Und diese Methode wird von Base Observable bereitgestellt.

04:22.970 --> 04:32.210
Wir erweitern also base observable, um Zugriff auf diese Methode zu erhalten. B steht für binding resources und ist eine von der Datenbindungsbibliothek

04:32.240 --> 04:35.210
generierte Klasse.

04:35.210 --> 04:43.010
Diese Klasse enthält konstante ganzzahlige Werte, die mit jeder der bindbaren Eigenschaften in Ihrer Datenquelle verbunden

04:43.010 --> 04:43.820
sind.

04:43.850 --> 04:52.040
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

04:52.040 --> 04:57.950
nicht finden kann, denn wenn ich nach oben gehe, kann ich keine bindungsfähige Anmerkung sehen.

04:57.950 --> 05:06.440
Um diesen Fehler zu beheben, füge ich hier vor der getName-Methode eine bindable-Annotation ein. Die Bindable-Annotation wird verwendet,

05:06.440 --> 05:15.260
um den Benutzernamen hier als beobachtbare Eigenschaft zu kennzeichnen, die der Datenbindung mitteilt, dass sie den erforderlichen Code

05:15.290 --> 05:19.220
zur Beobachtung von Änderungen generieren soll.

05:19.220 --> 05:27.680
Um zusammenzufassen, was wir zuvor getan haben, habe ich diese Datenquelle Person Klasse erweitern Basis observable, um

05:27.710 --> 05:36.980
den Zugriff auf die Eigenschaft geändert Methode und diese Methode, die ich hier übergeben werden Bindungsressourcen Punkt Name und

05:36.980 --> 05:45.920
dieser Name bezieht sich auf jede bindungsfähige Eigenschaft, und in diesem Fall bin ich sagen, Datenbindung, dass der Name Eigenschaft

05:45.920 --> 05:54.920
hat seinen Wert geändert und sagen Datenbindung, um den notwendigen Code, um Änderungen zu beobachten erzeugen.

05:54.920 --> 06:01.130
Wechseln wir nun zur Hauptaktivität, und hier muss ich die zweiseitige Bindung festlegen.

06:01.130 --> 06:08.330
Aber, da wir es vorher getan haben, muss ich eine Tätigkeit Hauptbindung erstellen und sie und Tätigkeit Hauptbindung Punkt gesetzte

06:08.330 --> 06:10.790
Person zu p eins initialisieren.

06:10.790 --> 06:19.250
Ich setze zunächst die Personenbuchse und kann diesen Text bearbeiten und die Änderungen in der Textansicht anzeigen.

06:19.250 --> 06:20.150
Los geht's.

06:20.150 --> 06:26.180
Sie brauchen hier also nichts zu schreiben und können sehen, dass ich diese Textansicht habe, die alte Textansicht.

06:26.180 --> 06:30.440
Ich habe eine neue Textansicht mit dem Namen Jack, und das ist der zu bearbeitende Text.

06:30.440 --> 06:31.250
Hier ist Jack.

06:31.740 --> 06:38.190
Ich muss es ändern und zum Beispiel John eingeben. Wie Sie sehen, gibt es einen Fehler.

06:38.220 --> 06:42.810
John Value wird nicht aktualisiert, so dass Jack weiterhin bestehen bleibt.

06:42.810 --> 06:47.250
Dies ist ein Fehler, den viele Entwickler machen.

06:47.250 --> 06:52.620
Es gibt hier also einen sehr wichtigen Trick in der Syntax des zu bearbeitenden Textes.

06:52.620 --> 06:56.160
Mit diesem Gleichheitszeichen ist das Problem also gelöst.

06:56.160 --> 07:05.430
In der Datenbindungsbibliothek von Android wird die Syntax des Gleichheitszeichens in geschweiften Klammern verwendet, um eine bidirektionale Datenbindung

07:05.430 --> 07:07.020
zu ermöglichen.

07:07.020 --> 07:15.170
Es ermöglicht einen bidirektionalen Datenfluss zwischen einem UI-Element und der Datenquelle, in der Regel einem ViewModel.

07:15.180 --> 07:22.830
Später werden wir über Viewmodels mit bidirektionaler Datenbindung sprechen. Änderungen am UI-Element aktualisieren automatisch die

07:22.830 --> 07:26.820
Datenquelle und die an der Datenquelle vorgenommenen Änderungen.

07:26.850 --> 07:34.620
Aktualisieren Sie das UI-Element automatisch, also verpassen Sie nicht, diese Syntax zu verwenden, wenn Sie mit dem Bearbeiten

07:34.630 --> 07:43.060
von Texten arbeiten, und Sie können sehen, wenn ich John eingebe, dass er die Textansicht automatisch aktualisiert.

07:43.060 --> 07:51.370
Selbst wenn ich den Text entferne, können Sie sehen, dass ich diesen Text aktualisiere, was wiederum die Textansicht und diese andere

07:51.370 --> 07:53.170
Textansicht aktualisiert.

07:53.170 --> 07:57.190
Dies ist die zweiseitige Bindung in Android.
