Android DataBinding & MVVM - Verwenden derselben Layoutdateien für verschiedene Bedingungen unter Verwendung derselben Ansichtsmodelle

9

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:

  1. Verwenden von Layout- und Layoutland-Ordnern (Fehlgeschlagen, Fehler wird oben erklärt)

  2. 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.

    
Melih Aksoy 07.09.2016, 08:25
quelle

2 Antworten

1

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.

%Vor%

Beide XMLs (Hoch- und Querformat) haben denselben Namen, sagen wir activity_main.xml .

%Vor%

Dann ist keine Überprüfung im MainActivity-Code erforderlich.

%Vor%

Das funktioniert.

Vorteile eines einzelnen ViewModels

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:

%Vor%

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.

    
Manas Chaudhari 10.10.2016 17:44
quelle
0
  

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%     
qinmiao 23.09.2016 11:32
quelle