24. September 2015 | 3 min lesezeit

Data Binding in Android

Zur Google I/O 15 wurden wieder einmal diverse Neuerungen zur Android Entwicklung präsentiert. Eine der interessantesten, ist Androids Data Binding auf Basis des MVVM (Model View Viewmodel) Architektur Pattern. Das Data Binding ermöglicht die Entwicklung deklarativer Layouts und reduziert den Code zur Verbindung von Business Logik und User Interfaces auf ein Minimum.

Vor den ersten Gehversuche müssen einige Abhänigkeiten und Werkzeuge den neusten Stand gebracht werden. Das Data Binding Plugin setzt Android Gradle Plugin 1.3 voraus. Desweiteren empfiehlt sich eine Aktualisierung von Android Studio auf v1.3 um Code-Completion und die Layout-Vorschau für Data Binding zur Verfügung zu haben.

Um das Data Binding in der App zu nutzen, muss das Data Binding Plugin in den Classpath der build.gradle (Listing: project.build.gradle) des Projekts gesetzt werden. Zusätzlich muss das Plugin in jedem Modul (Listing: app.build.gradle) eingetragen werden, in dem Data Binding verwendet werden soll. Das Plugin fügt die notwendigen Konfigurationsabhängigkeiten zum Projekt hinzu. Nach der Synchronisation der Gradle Scripte kann das Data Binding verwendet werden.

Anhand des Use Case Benutzerdaten anzeigen soll der Einsatz des Data Binding demonstriert werden. Damit dieses innerhalb eines Layouts genutzt werden kann, muss <layout> als XML Root Element verwendet werden. Nachfolgend kommt das optionale Tag <data>, indem die Java Objekte definiert werden, die an das Layout gebunden werden sollen.

Um auf die Daten des Benutzers zugreifen zu können, wird eine Variable vom Typ „com.example.User“ (Zeile 4) innerhalb des <data> Tags definiert. Damit kann das Objekt genutzt und innerhalb einer Textview auf die Attributen des Objekts zugreifen. Dies erfolgt mit Hilfe von Expressions unter Verwendung der @{…} Syntax (Zeile 12 & 15).

Analog zu bekannten Java Web-Frameworks kann auf diese Weise nicht nur auf gebundene Objekte sowie Android Resourcen zugegriffen werden, es stehen auch einfache Operatoren bereit.

Wichtig zu beachten ist, dass das Data Binding nur mit den vorgesehenen Datentypen (android:text) umgehen kann. Übergibt man einer TextView eine Zahl oder ein Objekt führt dies zu einer ClassCastException. Ein automatischer Aufruf der Methode toString, wie man es von anderen Java Frameworks gewohnt ist, erfolgt nicht. Dafür lässt sich in der Expression allerdings String.valueOf(…) verwenden.

Das Datenmodel kann bei Data Binding flexible sein. Man ist nicht auf ein statisches Konstrukt angewiesen. Daher ist es problemlos möglich, jedes beliebe Java Objekt zu benutzen. Sofern Felder als public vorhanden sind, werden diese für das Binding verwendet. Andernfalls wird erwartet, dass entsprechende Getter vorhanden sind.

Unsere View und das DomainModel sind vorhanden, doch wie weiß die View nun welches konkrete Objekt gebunden werden soll?

Mittels der Klasse Data BindingUtil setzen wir die Content View der Activity und holen uns gleichzeitig das ViewModel. Das ViewModel verfügt für jede im Layout gesetzte Variable einen entsprechenden Setter, mit welchen wir den User an unsere view binden können.

Doch nicht nur innerhalb einer Activity kann das Data Binding verwendet werden. Auch an anderen Orten, wie beispielsweise Fragments und Listen kann die View mit Hilfe der DataBindingUtil-Klasse initalisiert werden.

Mit Data Binding hat Android es geschafft, das Model View Viewmodel Pattern erfolgreich in das Android-Ökosystem zu intigrieren. Mit nur einer einzelnen Zeile Code können alle Attribute eines Objekts an die View gebunden und dargestellt werden. Jedoch hat dies auch seine Schattenseiten. Durch die Nutzung von Data Binding kann schnell die Konsistenz verloren gehen, wenn dies nicht für jede View verwendet wird. Ich persönlich jedoch sehe Data Binding als Segen, welcher einem viele Casts und viel unnötigen Quellcode erspart. Einziger echter Nachteil ist, dass es sich bei der hier vorgestellten Technologie um ein One-Way-Data-Binding handelt. Das Binden von Eingaben (über EditText-Views) ist deutlich komplizierter und wird daher in einem separaten Blog-Beitrag behandelt.

Wer mehr über das hier vorgestellte Thema Data Binding erfahren möchte, kann dies im Android Developer Blog nachlesen.


Keine Kommentare

Kontakt

OPEN KNOWLEDGE GmbH

Standort Oldenburg:
Poststraße 1, 26122 Oldenburg

Standort Essen:
II. Hagen 7, 45127 Essen