Ich habe keine befriedigenden Antworten bekommen. Hier sind die Tipps, die eine Zusammenfassung meiner Datenbindungskenntnisse darstellen.
Tipps zum Lösen von DataBinding-Problemen
Aktualisieren
Um genauere Fehler und Vorschläge zu erhalten , empfehle ich dringend, die Android Studio- und Gradle-Plugin-Version auf den neuesten Stand zu bringen. Weil ich nach der AS 3.2-Version nicht viele Probleme habe.
Siehe Neuestes Android Studio und Neuestes Gradle-Plugin .
Ursprüngliche Lösung
Nachdem Sie diese Antwort gelesen haben, werden Sie nicht in Problemen mit der automatischen Datenbindung für Klassen und Datenvariablen stecken bleiben .
Überprüfen Sie diese Punkte nacheinander. All dies kann Ihre Arbeit erledigen. Punkt 3 bis zum letzten sind wirklich wichtig, also verpassen Sie sie nicht.
1. Überprüfen Sie, ob die Datenbindung aktiviert ist
Sie sollten Datenbindung aktiviert in build.gradle
. Wenn nicht, fügen Sie dies hinzu und synchronisieren Sie .
android {
...
dataBinding {
enabled = true
}
...
}
2. Überprüfen Sie, ob das Layout in das Bindungslayout konvertiert wurde
Nun , wenn Sie wollen Datenklasse verbindlich dann erzeugt werden , sollten Sie wickeln xml layout
mit Datenbindung ( <layout
tag). Etwas wie das.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
Überprüfen Sie zusammen mit dieser Option, ob die Namen der Bindungsvariablen wie in der Ansichtsmodellklasse korrekt sind
3. Automatisch generierter Name der Bindungsklasse?
Ihre Datenbindungsklasse sollte nach dem Erstellen des Bindungslayouts generiert werden.
Wenn sich Ihr Layoutname im Fall einer Schlange befindet, wird die activity_main.xml
Datenbindungsklasse in einem Fall wie in einem Kamel generiert ActivityMainBinding
.
4. Importvorschlag nicht angezeigt?
Wenn Sie tippen ActivityMai...
, wird manchmal kein Vorschlag angezeigt . In diesem Fall wird der Import manuell durchgeführt .
import <yourpackage>databinding.ActivityMainBinding;
5. Lesen Sie Build Fail Logcat
Ihre Bindungsklasse und neue Variablen im Layout werden nicht generiert, wenn Ihr Build fehlschlägt. Also zuerst Projekt erstellen mit Strg + F9 (Erstellen> Projekt erstellen) .
- Wenn ein Build fehlschlägt, sehen Sie, was ein Fehler ist. In der Regel treten Fehler in den Layoutfeldern auf. Fehlerprotokolle weisen auf die Fehlerzeilennummer des Problems hin.
- Die Bindung kann fehlschlagen und einen dummen Fehler verursachen , z. B. einen Syntaxfehler oder einen fehlenden Import. In diesem Fall erhalten Sie logcat voller Fehler von Bindungsklassen. Sie sollten jedoch den vollständigen Logcat lesen , um das entsprechende Problem zu finden .
6. Schließen und öffnen Sie das aktuelle Projekt
Ich mache das immer, weil es viel weniger Zeit braucht als Rebuild
/ Make
project.
- Schließen Sie das Projekt über Datei> Projekt schließen
- Seit kurzem wieder geöffnet
Beachten Sie, dass ich das Schließen und Öffnen aus der letzten Version bevorzuge, da dies viel weniger Zeit in Anspruch nimmt als das Wiederherstellen / Neustarten der IDE .
7. Projekt neu erstellen
Wenn immer noch Ihre Klasse nicht generiert wird. (Irgendwann, wenn wir eine Layoutdatei einfügen, passiert es). Erstellen Sie dann das Projekt neu aus Build> Rebuild
( Nicht erstellen oder Projekt erstellen ). Es wird Ihre Datenbindungsklasse generiert. ( Wiederaufbau macht Magie für mich. )
8. Haben Sie das neueste Android Studio
Nach dem Update von AS auf Android Studio 3.2 hatte ich das Gefühl, dass viele Fehler bei der automatischen Generierung von Datenbindungen behoben wurden. Sie sollten also auch die neueste AS haben.
Lösung für <variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
Wenn wir eine Variable in das Layout einfügen, wird normalerweise ein Getter und ein Setter davon erstellt. Und wir können binding.setItem(item);
und verwenden binding.getItem();
, aber wenn Sie diese Methoden nicht sehen können, lesen Sie die folgenden Informationen.
1. Schließen und öffnen Sie das aktuelle Projekt
Wenn Sie eine Datenvariable <variable
in Ihrem Layout erstellt haben und deren Setter und Getter nicht in der Datenbindungsklasse angezeigt werden, schließen und öffnen Sie Ihr Projekt zuletzt.
2. Reinigen Sie das Projekt, nachdem Sie den Typ geändert haben
Wenn Sie den Typ einiger <variable
Elemente in Ihrem Layout geändert haben und sich der Getter-Setter-Typ nicht ändert, wird Clean project ( Build> Clean Project
)
Letzte Worte
Wenn Ihre Bindungsklasse immer noch nicht generiert wird, haben wir unsere stärkste Waffe. - Starten Sie Android Studio neu: D.
- Versuchen Sie zunächst einfach neu zu starten . Dies generiert nach dem Neustart immer Variablen meines Bindungslayouts.
- Wenn es nicht funktioniert, dann Cache ungültig machen und neu starten .
Dies ist alles, was ich tue, um meine Datenbindungsfehler zu lösen. Wenn Sie weitere Probleme haben, können Sie diese hier kommentieren.
dataBinding.enabled
in deinem build.gradle?