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




tag android studio (12)

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é / fragment, l'erreur est indiquée, 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


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.

Jusque-là, vous ne pourrez pas voir ActivityMainBinding généré.


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


La seule chose que je peux imaginer si possible, c’est si vous n’avez pas

dataBinding {
    enabled true
}

dans votre fichier de classement. Sinon, ajoutez-le simplement au fichier Gradle. c'est à dire

android {
  ......

  dataBinding {
    enabled true
  }
}

puis synchronisez votre projet. Si le problème persiste, vous devrez peut-être annuler / redémarrer votre studio Android.


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> 

si vous faites un travail de base, pour activer la databainding dans votre projet, comme utiliser enable dans gradle et utiliser la 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.


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.

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


Classe DataBinding générée automatiquement.

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

mais,

dataBinding {
        enabled = true
    }

mise en page doit avoir la mise en page en tant que racine

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

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 à nouveau en activity_main.xml . Ensuite, vous pouvez voir l'option d'importation sur ActivityMainBinding .

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


Je n'ai pas eu de réponse satisfaisante. Voici donc 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

Mettre à jour

Pour obtenir des erreurs et des suggestions plus précises , je 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 voulez que la classe de liaison de données soit générée, vous devez envelopper la xml layout en 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. Fermer et ouvrir le projet de la récente

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 Construire ou Construire le projet ). 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 de la récente

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, puis fermez et ouvrez votre projet récemment .

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 de poseur de 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, alors 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.


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


Les classes de liaison de données sont générées lors de la construction. Par conséquent, après avoir activé la liaison de données dans la version de Gradle de l'application 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.





android-databinding