143 votes

Classe de liaison de données non générée

Je suis à l'aide de la Liaison de Données dans mon projet, lors de l'utilisation d' <layout> et <data> de mon xml de liaison de la classe n'est pas généré.

Par exemple, j'ai activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </RelativeLayout>
</layout>

Maintenant, si je suis en train d'écrire ActivityMainBinding de mon activité/fragment, il affiche l'erreur que la classe n'est pas disponible. Mais après, y compris <variable> dans mon fichier xml, il est capable de générer ActivityMainBinding classe.

Android Studio : 2.1.3
Classpath : com.android.outils.construire:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0

367voto

Khemraj Points 8449

Je n'ai pas eu aucune réponse satisfaisante. Voici donc les conseils qui est le résumé de ma liaison de données de connaissances.

Conseils pour diminuer coincé temps dans la liaison de données

Mise à jour

Pour obtenir plus précise des erreurs et des suggestions, je vous recommande fortement de mettre à jour Android Studio et Gradle plugin version à la dernière. Parce que je ne suis pas confrontée à de nombreux problèmes par la suite en tant QUE version 3.2.

Voir le Dernier Android Studio, et plus tard Plugin Gradle.

Originale Solution

Après la lecture de cette réponse, vous ne sera pas coincé dans la liaison de données de la génération automatique des problèmes pour les deux Classes de Données et de Variables.

Vérifiez ces points un par un. Tous ces éléments peuvent rendre votre travail terminé. Point 3 à la dernière sont vraiment important, il ne faut pas les manquer.

1. Vérifiez si la liaison de données est activé

Vous devriez avoir la liaison de données est activé en build.gradle. Si non, alors ajouter ce et de Synchronisation.

android {
...
   dataBinding {
        enabled = true
    }
...
}

2. Vérifier la mise en page est converti dans la liaison de mise en page

Maintenant, si vous voulez la liaison de données de la classe générée, alors vous devriez envelopper xml layout avec la liaison de données (<layout tag). Quelque chose comme cela.

<?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>

3. Auto-généré de Liaison nom de la classe?

Vos données de liaison de la classe doit être généré après la création de la liaison de mise en page.

Si votre mise en page nom de serpent de cas activity_main.xml puis de liaison de données de classe seront générés à dos de chameau cas comme ActivityMainBinding.

4. Ne pouvez pas Voir à l'Importation Suggestion?

Parfois, lorsque vous tapez ActivityMai..., alors qu'il ne montre pas de suggestion, dans ce cas, importer manuellement.

    import <yourpackage>databinding.ActivityMainBinding;

5. Lire Build Échoue Logcat

Votre de liaison de la classe et de nouvelles variables dans la mise en page ne sera pas généré si votre échec de la construction. Donc tout d'abord créer un projet par Ctrl + F9 (Build > créer un projet).

  • Si l'échec de la construction puis voir ce qui est de l'erreur, nous ont généralement des erreurs dans la mise en forme des champs. Les journaux d'erreur sera point erreur de numéro de ligne de la question.
  • La liaison peut échouer à cause de certains stupide erreur, comme erreur de syntaxe ou manquant d'importation. Dans ce cas, vous obtiendrez logcat plein d'erreurs de liaison des classes. Mais vous devriez lire complet logcat pour trouver de problème.

6. Fermez et ouvrez le projet à partir des récentes

J'ai toujours le faire, car il prend beaucoup moins de temps qu' Rebuild / Make du projet.

  • Fermer le projet à partir d'un Fichier > Fermer le Projet
  • Ouvrez de nouveau de récents

Notez que je préfère le Fermer et l'Ouvrir à partir Récente , car il prend beaucoup moins de temps que la Reconstruction / Redémarrage de l'IDE.

7. Projet De Reconstruction De

Si votre classe n'est pas généré. (Quelque temps lorsque nous coller fichier de mise en page, ça arrive). Puis Projet de Reconstruction à partir d' Build> Rebuild (Pas de Construire ou de projet). Il va générer vos données de liaison de la classe. (Reconstruction ne de la Magie pour moi.)

8. Avez la dernière version d'Android Studio

Après la mise à jour d' Android Studio 3.2, j'ai ressenti beaucoup de bug fix dans la liaison de données de la génération automatique. Donc vous devriez également avoir plus tard.

Solution pour <variables

<data>
    <variable
        name="item"
        type="com.package.Model"/>
</data>

Habituellement, lorsque nous mettre la variable dans la mise en page, il crée des getter et setter. Et nous pouvons utiliser l' binding.setItem(item); et binding.getItem();, mais si vous ne pouvez pas voir que les méthodes puis lire les informations ci-dessous.

1. Fermez et ouvrez le projet à partir des récentes

Si vous avez créé une variable de données - <variable dans votre mise en page et il ne montre pas son setter et getter de la liaison de données de la classe, puis Fermez et Ouvrez de Récente de votre projet.

2. Nettoyage de projet après un changement de type

Si vous avez modifié le type de certains <variable dans votre mise en page getter et setter type ne change pas alors Propre projet (Build> Clean Project)

Les derniers mots de

Enfin, si votre classe binding n'est pas généré, puis nous avons notre arme la plus puissante. - Redémarrer Android Studio:D

  • Essayez d'abord juste un redémarrage, cela donne toujours lieu à des variables de ma liaison de mise en page après le redémarrage.
  • Si ne fonctionne pas, alors Invalider le Cache Et Redémarrer.

C'est tout ce que je faire pour résoudre mon de liaison de données et les erreurs. Si vous obtenez toute autre question, vous pouvez commenter ici.

46voto

ViramP Points 933

Classe DataBinding générée automatiquement.

si votre nom xml est activity_test, la classe de liaison sera ActivityTestBinding.

mais,

 dataBinding {
        enabled = true
    }
 

la disposition doit avoir la disposition en tant que racine

 <layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>
 

18voto

ngaspama Points 96

J'ai eu le même problème. Après avoir lu la documentation de sdk android, il ne reste plus que le nom de fichier attendu à créer, mais plus rien à faire si cela ne se produit pas. Après quelques recherches supplémentaires, j’ai remarqué qu’après avoir supprimé l’espace de nom de l’élément de présentation, comme ci-dessous (avec votre exemple), cela fonctionnait pour moi.

     <?xml version="1.0" encoding="utf-8"?>
    <layout>
        <data>  </data>
        <RelativeLayout
           xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
        </RelativeLayout>
    </layout> 
 

11voto

Krzysztof Kubicki Points 415

Dans mon cas, la classe Binding a été générée et en place (mais je pensais que ce n’était pas le cas) ... mais elle n’ajoute pas automatiquement l’importation de ladite classe à la section d’import / activité / fragment ... alors ... OPTION + ENTRER :)

8voto

Xtreme Biker Points 5612

Après l'avoir configuré correctement (y compris l'espace de noms xml et son contenu dans <layout> ), celui qui a fonctionné pour moi était en train de faire Build -> Make project. Le projet Nor Clean ou le projet de reconstruction l'ont fait. Je suis dans Android Studio 2.3.1, en utilisant les outils de génération 26.0.2. Il n'y a pas besoin de balises <data> .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X