name - tag android studio




Classe de liaison de données non générée (14)

1.Ajouter ci-dessous dans l'appli

 dataBinding { enabled = true } 

2.Dans la mise en page XML, écrivez en dessous du code

 <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data></data> </layout>if you don't get data binding class just rename the layout file name and you will get data binding class. 

J'utilise la liaison de données dans mon projet, lorsque <layout> et <data> dans ma classe de liaison xml 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 j'écris ActivityMainBinding dans mon activité / mon fragment, il indique une erreur: cette classe n'est pas disponible. Mais après avoir inclus <variable> dans mon fichier xml, il est capable de générer ActivityMainBinding classe ActivityMainBinding .

Android Studio: 2.1.3
Classpath: com.android.tools.build:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0


Après l'avoir correctement configuré (y compris l'espace de noms xml et le tout dans <layout> ), celui qui a fonctionné pour moi était 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> .


Dans mon cas, je pensais que la classe générée devait apparaître avec mes classes habituelles dans le dossier src . De plus, je pensais que le nom de la classe générée devrait être légèrement différent. C'était tout mon erreur. La classe générée peut être trouvée dans le dossier de build -> generated -> ... , build -> generated -> ... chemin. S'il n'y a aucune importation de la classe générée dans votre activité, ajoutez l'importation

<layout
    xmlns:android="http://schemas.android.com/apk/res/android">
  <data></data>
</layout>if you don't get data binding class just rename the layout file name and you will get data binding class.

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 :)


J'ai eu le même problème. Tout ce que vous avez fait correctement. La chose est que vous devez ajouter la variable à l'intérieur de la balise de données en XML. Pour cela, vous devez créer un exemple de classe de modèle et l'ajouter en tant que variable dans la balise de données.

Jusqu'à ce que vous n'ayez pas accès à ActivityMainBinding généré.


J'ai eu le problème et le problème était dans la mise en page, le champ utilisé n'était pas une chaîne, mais une date.

Il semble que tous les champs doivent contenir du texte, au moins avec le composant TexView.

Si vous construisez avec la commande ./gradlew build --stacktrace

Cela montre mieux les erreurs.


Je n'ai pas eu de réponse satisfaisante. Alors voici les astuces qui sont un résumé de mes connaissances en liaison de données.

Conseils pour résoudre les problèmes de liaison de données

Mise à jour

Pour obtenir des erreurs et des suggestions plus précises , je vous recommande fortement de mettre à jour Android Studio et la version du plugin Gradle vers 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 studio Android et le dernier plugin Gradle .

Solution d'origine

Après avoir lu cette réponse, vous ne serez plus bloqué par des 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. Chacun de ces éléments peut rendre votre travail effectué. Les points 3 à dernier sont vraiment importants, alors ne les manquez pas.

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

La liaison de données doit être activée dans build.gradle . Si ce n'est pas le cas, ajoutez ceci et Sync .

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

2. Vérifier que la mise en page est convertie en mise en page obligatoire

Maintenant, si vous souhaitez que la classe de liaison de données soit générée, vous devez envelopper la xml layout avec la liaison de données ( <layout balise de <layout ). 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>

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 d'une présentation de liaison.

Si votre nom de structure est dans le cas de snake activity_main.xml la classe de liaison de données sera générée dans le cas de chameau, comme ActivityMainBinding .

4. Vous ne pouvez pas voir la suggestion d'importation?

Parfois, lorsque vous tapez ActivityMai... , la suggestion ne s'affiche pas , dans ce cas, importez-la manuellement .

    import <yourpackage>databinding.ActivityMainBinding;

5. Lecture Build Fail Logcat

Votre classe de liaison et les nouvelles variables de la mise en page ne seront pas générées si votre construction échoue. Créez donc d'abord le projet avec Ctrl + F9 (Construire> Construire le projet) .

  • Si la construction échoue, voyez ce qui est une erreur, nous avons généralement des erreurs dans les champs de présentation. Les journaux d'erreur indiqueront le numéro de ligne d'erreur en cause.
  • La liaison peut échouer et provoquer une erreur stupide , telle qu'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 logcat complet pour trouver le problème approprié .

6. Fermez et ouvrez le projet récent

Je fais toujours cela parce que cela prend beaucoup moins de temps que le projet Rebuild / Make .

  • Fermer le projet depuis Fichier> Fermer le projet
  • Ouvrir à nouveau de récente

Notez que je préfère fermer et ouvrir à partir de récents car cela prend beaucoup moins de temps que la reconstruction / relance IDE .

7. Projet de reconstruction

Si toujours votre classe n'est pas générée. (Il arrive parfois que nous collions un fichier de mise en page). Ensuite, reconstruisez le projet à partir de Build> Rebuild ( pas de projet Build ou Make ). Il va générer votre classe de liaison de données. ( Reconstruire fait de la magie pour moi. )

8. Avoir le dernier Android Studio

Après la mise à jour d'AS vers Android Studio 3.2 , de nombreuses corrections de bogues dans la génération automatique de liaisons de données ont été constatées. Donc, vous devriez aussi 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. Fermer et ouvrir le projet à partir de récents

Si vous avez créé une variable de données - <variable dans votre mise en page et qu'elle n'affiche ni ses paramètres de départ ni de lecture dans la classe de liaison de données, cliquez sur Fermer et ouvrir à partir de votre projet récent .

2. Nettoyer le projet après avoir changé de type

Si vous avez modifié le type de certaines <variable dans votre mise en page et que le type du configurateur getter ne change pas, alors Nettoyer le projet ( Build> Clean Project )

Mots finaux

Enfin, si votre classe de liaison n’est toujours pas générée, nous disposons de notre arme la plus puissante. - Redémarrer Android Studio: D

  • Essayez d'abord de redémarrer , cela génère toujours des variables de ma mise en page de liaison après le redémarrage.
  • Si ne fonctionne pas, Invalidate Cache & Restart .

C'est tout ce que je fais pour résoudre mes erreurs de liaison de données. Si vous avez d'autres questions, vous pouvez commenter ici.


Je ne sais pas si cela fonctionnera pour vous ou non. Il suffit de renommer le nom du fichier XML de présentation. Comme si vous supposiez que votre nom de structure est activity_main.xml, changez-le en le renommant main.xml et renommez-le en activité_main.xml . Ensuite, vous pouvez voir l’option d’importation sur ActivityMainBinding .

J'espère que ça marche pour toi.


Les classes de liaison de données sont générées lors de la création. Par conséquent, après avoir activé la liaison de données dans la construction de l'application Gradle et entouré votre code XML avec la balise de mise en page, vous devez reconstruire votre application. Si cela ne vous aide pas, supprimez votre dossier de construction et recommencez.


Lorsque vous travaillez avec une application Android multi-modules, vérifiez votre chemin d'accès aux classes de liaison. Peut-être devriez-vous utiliser:

import com.yourcompany.app.android.modulename.databinding.FragmentABCtBinding com.votreentreprise.app.android.nom.module.databinding.FragmentABCtBinding à partir de:

import com.yourcompany.app.android.databinding.FragmentABCtBinding


Si vous obtenez l'erreur suivante dans DataBindingUtil.setContentView

Référence non résolue: activity_main

tout ce que vous devez faire est de supprimer la déclaration d'importation suivante

importer android.R

J'ai trouvé la solution sur un autre forum. La source


Si, récemment, un projet existant a été migré dans androidx, vous devez remplacer votre import depuis

dataBinding {
    enabled true
}

à

android {
  ......

  dataBinding {
    enabled true
  }
}

Après 2 jours, Google a enfin trouvé la solution qui me convient le mieux.


si vous faites un travail de base, pour activer la databainding dans votre projet, comme utiliser enable dans gradle et utiliser une balise layout en xml , lorsque vous modifiez le code xml et que vous ne générez pas une nouvelle classe databinding pour ces xml, vous pouvez utiliser un moyen rapide de générer uniquement des données binding class in gradle-> other-> databindinggenbaseclassesDebug it plus rapidement qu'un projet entier volumineux. sa générer uniquement la classe de liaison de données.


utiliser le chemin de classe 'com.android.databinding: dataBinder: 1.0-rc0'





android-databinding