Je n'ai pas obtenu de réponses satisfaisantes. Voici donc les conseils qui résument mes connaissances en matière de liaison de données.
Conseils pour résoudre les problèmes de DataBinding
Mettre à jour
Pour obtenir des erreurs et des suggestions plus précises , je recommande fortement de mettre à jour la version du plugin Android Studio et Gradle à la dernière version. Parce que je ne suis pas confronté à beaucoup de problèmes après la version AS 3.2.
Voir le dernier Android Studio et le dernier plug-in Gradle .
Solution originale
Après avoir lu cette réponse, vous ne serez pas bloqué dans les problèmes de génération automatique de liaison de données pour les classes et les variables de données .
Vérifiez ces points un par un. N'importe lequel de ces éléments peut rendre votre travail terminé. Le point 3 pour durer est vraiment important, alors ne les manquez pas.
1. Vérifiez si la liaison de données est activée
La liaison de données doit être activée dans build.gradle
. Sinon, ajoutez ceci et Sync .
android {
...
dataBinding {
enabled = true
}
...
}
2. Vérifiez que la mise en page est convertie en mise en page de reliure
Maintenant, si vous voulez que la classe de liaison de données soit générée, vous devez encapsuler xml layout
avec la liaison de données ( <layout
balise). Quelque chose comme ça.
<?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>
Parallèlement à cela, vérifiez si les noms des variables de liaison sont corrects comme dans la classe de modèle de vue
3. Nom de classe de liaison généré automatiquement?
Votre classe de liaison de données doit être générée après la création de la disposition de liaison.
Si votre nom de mise en page est dans le cas du serpent, activity_main.xml
la classe de liaison de données sera générée dans le cas du camel comme ActivityMainBinding
.
4. Vous ne voyez pas la suggestion d'importation?
Parfois, lorsque vous tapez ActivityMai...
, il n'affiche pas de suggestion , dans ce cas, importez manuellement .
import <yourpackage>databinding.ActivityMainBinding;
5. Lire le journal des échecs de construction
Votre classe de liaison et les nouvelles variables de mise en page ne seront pas générées si votre construction échoue. Alors commencez par créer un projet avec Ctrl + F9 (Construire> Créer un projet) .
- Si une construction échoue, voyez ce qu'est une erreur, nous avons généralement des erreurs dans les champs de mise en page. Les journaux d'erreurs indiqueront le numéro de ligne d'erreur avec le problème.
- La liaison peut échouer et provoquer une erreur stupide , comme une erreur de syntaxe ou une importation manquante. Dans ce cas, vous obtiendrez logcat plein d'erreurs de classes de liaison. Mais vous devriez lire le logcat complet pour trouver le problème approprié .
6. Fermez et ouvrez le projet de
Je fais toujours cela car cela prend beaucoup moins de temps que Rebuild
/ Make
project.
- Fermer le projet à partir du fichier> Fermer le projet
- Ouvrir à nouveau depuis récent
Notez que je préfère Fermer et Ouvrir à partir de Récent car cela prend beaucoup moins de temps que Reconstruire / Redémarrer l'IDE .
7. Projet de reconstruction
Si toujours votre classe n'est pas générée. (Un certain temps, lorsque nous collons le fichier de mise en page, cela se produit). Ensuite, reconstruisez le projet à partir de Build> Rebuild
( Ne pas générer ni créer de projet ). Il générera votre classe de liaison de données. ( Rebuild fait de la magie pour moi. )
8. Avoir le dernier Android Studio
Après avoir mis à jour AS vers Android Studio 3.2 , j'ai senti de nombreux bugs corrigés dans la génération automatique de liaison de données. Donc, vous devriez également avoir le dernier AS.
Solution pour <variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
Habituellement, lorsque nous mettons une variable dans la mise en page, cela crée un getter et un setter. Et nous pouvons utiliser binding.setItem(item);
et binding.getItem();
, mais si vous ne pouvez pas voir ces méthodes, lisez les informations ci-dessous.
1. Fermez et ouvrez le projet de
Si vous avez créé une variable de données - <variable
dans votre mise en page et qu'elle n'affiche pas son setter et son getter dans la classe de liaison de données, fermez et ouvrez à partir de Récent votre projet.
2. Nettoyez le projet après avoir changé le type
Si vous avez changé le type de certains <variable
dans votre mise en page et que le type de setter getter ne change pas, Clean project ( Build> Clean Project
)
Derniers mots
Enfin, si votre classe de liaison n'est toujours pas générée, nous avons notre arme la plus puissante. - Redémarrez Android Studio: D
- Tout d'abord, essayez de redémarrer , cela génère toujours des variables de ma disposition de liaison après le redémarrage.
- Si cela ne fonctionne pas, invalider le cache et redémarrer .
C'est tout ce que je fais pour résoudre mes erreurs de liaison de données. Si vous rencontrez d'autres problèmes, vous pouvez commenter ici.
dataBinding.enabled
dans votre build.gradle?