Ich habe eine App mit Datenbindung entwickelt & amp; MVVM.
Ich versuche ein alternatives Layout für meine App im Querformat zu verwenden. Ich habe:
%Vor%Beide Layouts haben dieselben Ansichten mit unterschiedlichem Aussehen und erhalten Feeds von denselben Ansichtsmodellen wie folgt:
%Vor%Alle Ansichten und IDs sind in beiden Layouts vorhanden.
Nun, das Problem ist, es kompiliert nicht, Fehler ist einfach "cannot find symbol method getViewModel"
und Getter für die andere Variable.
Was ich bisher versucht habe:
Verwenden von Layout- und Layoutland-Ordnern (Fehlgeschlagen, Fehler wird oben erklärt)
Layout eines Pseudonyms Verwendung Skizze Aliases die ich hier gefunden Issue 199.344: Datenbindung funktioniert nicht mit Layout-Aliase . Ich änderte nichts in XML-Dateien, während ich diesen Ansatz versuchte. Dies ist ebenfalls fehlgeschlagen, Fehler ist Could not write to com.myapp.package.databinding.MyBinding
Ist es nicht möglich, die Datenbindung data
tag in mehreren Layoutdateien zu verwenden? Was sollte ich verwenden, um verschiedene Layouts für verschiedene Zustände zu verwenden, während Datenbindung verwendet wird? Danke!
Bearbeiten: Durch das Löschen von class="MyBinding"
wurden Fehler nicht geändert.
Ich verwende MVVM in meinen Apps und baue auch eine Bibliothek dafür.
Ich folge der Konvention, dass es in jedem XML ein einziges ViewModel gibt. Außerdem ist der Name der Variablen viewmodel in allen XML-Dateien identisch.
In Ihrem Fall können Sie also eine andere ViewModel-Klasse erstellen, die VMFirst
und VMSecond
enthält.
Beide XMLs (Hoch- und Querformat) haben denselben Namen, sagen wir activity_main.xml
.
Dann ist keine Überprüfung im MainActivity-Code erforderlich.
%Vor%Das funktioniert.
Da ich in allen xmls denselben Variablennamen verwende, kann ich die Bindungslogik in eine Basisklasse MvvmActivity
selbst einbeziehen. Also, alle meine Aktivitäten sehen so aus:
MvvmActivity Implementierung: MvvmActivity.java
Ein weiterer Vorteil der Beibehaltung einer konstanten Datenbindungsvariablen besteht darin, dass Sie RecyclerView- oder ViewPager-Adapter selbst in XML einrichten können. Siehe Setup-RecyclerView von XML für weitere Details.
Standardmäßig wird eine Binding-Klasse basierend auf dem Namen der Layout-Datei generiert, in Pascal umgewandelt und mit "Binding" versehen. Die obige Layoutdatei war main_activity.xml, also war die generate-Klasse MainActivityBinding. - Binden von Daten
und zur Kompilierzeit generiert.
Wählen Sie also ein anderes Layout mit Java-Code.
%Vor%Tags und Links android android-layout android-studio android-databinding