Android-DataBinding-comment et quand les classes de reliure seront générées?

18 réponses

Quel Est votre nom de mise en page?

le fichier de mise en page ci-dessus était activity_main.xml donc la classe generate était ActivityMainBinding.

cela signifie que le nom de classe généré dépendra du nom de votre layout



activity_main.xml - > ActivityMainBinding.java



je pense que votre nom de l'activité est "main_activity", de sorte que le nom de classe de liaison généré doit être MainActivityBinding pas ActivityMainBinding

65
répondu Mao 2016-04-12 13:10:24

quand il ne génère pas la classe binding, je redémarre Android studio. Alors la classe binding sera générée. N'est-ce pas causé par la cache d'android studio?

BTW , si vous utilisez android-apt , veuillez le vérifier. Parce qu'il va causer liant classe de ne pas être générer.

31
répondu Frank Cheng 2016-04-12 13:38:20

avez-vous mis à jour votre fichier de mise en page pour la liaison de données? Ils ne sont générés que pour les layouts qui ont une liaison de données.

il doit commencer avec une étiquette layout qui a 2 étiquettes enfant (données et votre vue racine).

quelque chose comme ça:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout ...
   </LinearLayout>
</layout>

lorsque votre mise en page a ce formulaire, AndroidStudio devrait remplir automatiquement la classe. Aussi, par défaut, il est généré dans <your.app.package>.databinding .

23
répondu yigit 2018-09-25 04:52:03

essayez de renommer layout en main_activity.xml .

dans mon cas, cela n'a pas fonctionné pour générer la classe de liaison pour" activity_main.XML."

Mais renommer le fichier de mise en page en main_activity.xml a très bien fonctionné.

12
répondu surlac 2015-11-16 18:00:16

s'assurer que la disposition de la:

 <data>
   <variable name="user" type="com.example.User"/>
 </data>

est dans l'activity_main .xml si vous recherchez ActivityMainBinding. Dans la plupart des projets boilerplate, vous définissez votre vue de contenu à activity_main.xml, mais ensuite vous gonflez fragment_main.XML.

si vous mettez votre <data> dans fragment_main.layout xml alors la classe qui est générée sera FragmentMainBinding .

Note: cela peut sembler évident après lecture, mais c'est quelque chose qui peut être facilement négligé en suivant la documentation android.

4
répondu CodyF 2015-09-29 14:56:05

dans mon cas, redémarrer Android Studio fonctionne. C'est bug dans android-apt

3
répondu user3871754 2016-09-06 09:56:32

si vous avez déjà voulu donner votre propre nom de classe liant, ajoutez simplement l'attribut class à l'élément data avec le nom de classe

Les classes de liaison

peuvent être renommées ou placées dans des paquets différents en ajustant l'attribut de classe de l'élément de données.

<data class="ContactItem">
    ...
</data>

<data class="com.example.ContactItem">
...
</data>
3
répondu Bharatesh 2018-04-24 08:53:00

pour que la databinding android fonctionne correctement, vous devez utiliser les outils android pour gradle (com.Android.outils.construire:gradle) >=1.3.0.

donc votre projet de construction.gradle doit ressembler à:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath "com.android.databinding:dataBinder:1.0-rc1"
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

et construction de modules.gradle doit avoir ce plugin:

apply plugin: 'com.android.databinding'

après tout, vérifiez dans votre module que vous utilisez la dernière version de buildToolsVersion (pour l'instant, il s'agit de 22.0.1). Je ne suis pas sûr que ce soit nécessaire, mais il est possible que vous vous êtes à la "pointe de la technologie"^_^:

buildToolsVersion '22.0.1'

Resync gradle et reconstruire votre projet . Il est probablement possible que sans la reconstruction du projet vous pourriez ne pas obtenir SomeLayoutBinding classes générées.

dans Android Studio qui pourrait être fait à partir du menu application: Build -> Rebuild project

1
répondu Клаус Шварц 2015-08-15 14:29:59

fait face à la même question.

la raison pour "ne peut pas résoudre ActivityMainBinding" est que votre fichier de liaison n'est pas généré. Essayez de nettoyer et reconstruire projet. Assurez-vous également que vous avez suivi les étapes:

  1. classpath " com.Android.de liaison de données:dataBinder:1.0 rc4" --> l'inclure dans module principal build fichier
  2. appliquer le plugin: "com.Android.databinding' à votre app module vous êtes le bâtiment
  3. Propre
  4. Rebuild. Cochez la case, si build - >indermediates->votre nom de paquet - > le dossier databinding est généré contenant la classe ActivityMainBinding.

alternativement si vous voulez voir la source générée.

  1. classepath "com.neenbedankt.gradle.plugins: android-apt: 1.7' -- > appliquer à votre module principal.
  2. appliquer le plugin: com.neenbedankt.android-apt' --> pour vous app module
  3. apt 'com.Android.de liaison de données:compilateur:1.0-rc0' --> inclure dans vos dépendances.

ces classes seront générées lors de la première construction. Assurez-vous également que le applicationId en votre module d'application est le même que le nom de paquet dans AndroidManifest.xml de votre module app. Espérons que cette aide.

1
répondu ashish bulchandani 2015-12-26 10:18:25

D'après mon expérience, Android Studio 3.1.3 a généré la classe databinding après avoir cliqué sur"construire > reconstruire le projet". Le fichier a été stocké dans:

\Projet\app\build\généré\source\apt\développement\debug\projet\android\app\de la liaison de données

Cependant, Android Studio encore , a rapporté la classe binding "Inconnu" dans le code source.

pour le fixer enfin, je manuellement ajouté le importation déclaration:

importer un projet.Android.App.la liaison de données.* ;

1
répondu Someone Somewhere 2018-07-31 10:22:10

un simple redémarrage n'a pas fonctionné pour moi. J'ai dû Invalidate Caches and Restart pour voir les classes de reliure. C'est sous le menu File pour ceux qui ne savent pas.

1
répondu IsaiahJ 2018-09-30 08:53:17

bizarre "bug" dans android studio provoque l'généré BR.le fichier java ne doit pas utiliser les champs @Bindable et n'a toujours la propriété _all que si un répertoire res/layout n'existe pas.

il m'est arrivé quand je voulais créer une application" No Activity " pour avoir une bibliothèque qui contenait mes différentes données liables.

0
répondu Aurélien Lemaitre 2016-09-07 19:21:43

dans mon cas, je viens de joindre ma mise en page xml dans les balises <layout></layout> et c'est tout, sans ajouter la balise de données, j'ai réussi à générer des reliures de données. Espérons que cette aide.

<data>
       <variable name="user" type="com.example.User"/>
</data>
0
répondu Qasim 2017-03-08 12:08:18
<data class="MainActivityBinding">
    <variable
        name="user"
        type="com.example.administrator.my_mvvm.User" />
</data>

//Rappelez-vous besoin Build-> Projet De Reconstruction De

0
répondu a442509097 2017-09-15 15:29:46

vérifiez le niveau d'accès aux champs de votre objet, quand je suis devenu public il a fonctionné ici

0
répondu Kleyton Santos 2018-01-31 19:05:11

si vous ne voulez pas redémarrer android studio, une façon est de renommer activity_main.xml à autre chose E. g activity_m.xml puis renommez-le en activity_main.XML. Il est beaucoup plus rapide que redémarrer android studio.

pour renommer, clic droit sur activity_main.xml et choisissez Refactor => Renommer

0
répondu tick t 2018-05-21 08:39:13

1) pour activer la liaison de données, ajouter le code ci-dessous dans le fichier gradle au niveau du module. (Module:app)

android {    
    ...
    dataBinding {
        enabled = true
    }

}

les versions précédentes du compilateur de liaison de données ont généré la liaison classes dans la même étape qui compile votre code géré. Si votre le code géré échoue à compiler, vous pourriez obtenir plusieurs rapports d'erreurs que les classes obligatoires ne sont pas trouvées. La nouvelle liaison de données compilateur prévient ces erreurs en générant les classes de liaison avant l' géré compilateur crée votre application.

(2) Pour activer le nouveau compilateur de liaison de données, ajoutez l'option suivante à votre Grad.fichier de propriétés:

android.databinding.enableV2=true

ça me va...

0
répondu Samir Mangroliya 2018-09-25 12:38:57

Règle

le nom de Layout est en snake_case , et le nom de la classe de liaison généré sera CamelCase .

si votre nom de layout est activity_home.xml , alors le nom de la classe liant sera être ActivityHomeBinding.class .

problème

  1. plusieurs fois vous ne recevez pas la suggestion d'importation de classe de reliure de données.
  2. La classe de liaison
  3. n'est pas générée lorsqu'il y a un problème dans layout.
  4. classe de liaison ne sont pas disponibles lorsque la construction est échoué

Ici est hack

Lorsque vous N'obtenez pas l'Importation de Suggestion

  • quand vous ne recevez pas de suggestion d'importation. Importer manuellement votre classe de liaison comme ceci. (IDE souvent ne montrent pas de suggestions pour les classes de liaison)

    import <yourpackage>databinding.ActivityMainBinding;
    

la ligne D'importation affiche toujours une erreur?

  • Si votre ligne d'importation d'erreur s'affiche, puis essayez projet (ctrl + F9) / Build> créer un Projet . .
    1. si la construction a échoué à cause d'une erreur, alors résolvez-la.
    2. si la construction est réussie alors la classe de liaison sera générée.

hack rapide pour générer la classe de liaison -

  • Si votre classe binding n'est pas généré puis fermer le projet (Fichier > Fermer le Projet) et ouvert du récent .

notez que je recommande fermer et ouvrir de récente parce qu'il prend moins de temps que reconstruire / Redémarrez IDE .

hack rapide pour générer des variables de mise en page dans la classe de liaison -

  • si votre variable de données de mise en page n'est pas générée alors close project (File > Close Project) et open from recent .

si vous avez encore des problèmes. Faites-moi savoir dans les commentaires, ou voir cette réponse pour une meilleure compréhension.

0
répondu Khemraj 2018-10-03 07:55:44