Android – DataBinding – Comment et quand les classes de liaison seront générées?

Indicateurs de données

By default, a Binding class will be generated based on the name of the layout file, converting it to Pascal case and suffixing “Binding” to it. The above layout file was activity_main.xml so the generate class was ActivityMainBinding. 

Quand la classe Binding, ici, indique ActivityMainBinding, sera générée. J'ai une erreur de temps de compilation. "Ne peut pas résoudre ActivityMainBinding".

 ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity); 

Toute aide est appréciée. Merci

  • Utilisation de la liaison de données dans l'erreur Android: package *. *. La liaison de données n'existe pas
  • Liaison de données Android - 'Aucun identifiant de ressource trouvé pour l'attribut'
  • Erreur lors de l'utilisation de la liaison de données dans Android
  • «Impossible de trouver une variable de symbole» dans la liaison de données Android inclut la mise en page
  • Utilisation de la bibliothèque DataBinding pour les événements de liaison
  • Connexion de liaison Android - Comment obtenir des dimensions de dimens.xml
  • Problème avec liaison de données à l'aide de Kotlin pour Android
  • La liaison de données Android produit "Dossiers source générés à un mauvais emplacement"
  • 12 Solutions collect form web for “Android – DataBinding – Comment et quand les classes de liaison seront générées?”

    Quel est votre nom de mise en page?

    Le fichier de mise en page ci-dessus était activity_main.xml afin que la classe generate soit ActivityMainBinding.

    Ce que cela signifie, c'est que le nom de classe généré dépend du nom de votre mise en page

    Activity_main.xml -> ActivityMainBinding.java

    Je pense que votre nom d'activité est "main_activity", donc le nom de la classe de liaison généré devrait être MainActivityBinding et non ActivityMainBinding

    Quand il ne génère pas la classe de liaison, je redémarre le studio Android. Ensuite, la classe de liaison sera générée. N'est-ce pas causé par le cache du studio Android?

    BTW, si vous utilisez android-apt , vérifiez-le. Parce qu'il amènera la classe de liaison à ne pas générer.

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

    Il doit commencer par une étiquette de layout qui comporte 2 balises enfants (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> 

    Lorsque votre présentation comporte ce formulaire, AndroidStudio devrait compléter automatiquement la classe. De plus, par défaut, il est généré dans <your.app.package>.databinding package.

    Essayez de renommer la mise en page à main_activity.xml .

    Dans mon cas, il ne fonctionnait pas pour générer une classe de liaison pour "activity_main.xml".
    Mais renommer le fichier de mise en page à main_activity.xml fonctionné très bien.

    Assurez-vous que la mise en page de:

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

    Est dans activity_main.xml si vous recherchez ActivityMainBinding. Dans la plupart des projets d'installation, vous définissez votre vue de contenu sur activity_main.xml, mais vous gonflez fragment_main.xml.

    Si vous mettez votre <data> dans la structure fragment_main.xml, la classe générée sera FragmentMainBinding .

    Note: Cela peut sembler évident après la lecture, mais c'est quelque chose qui peut être facilement négligé lors de la suite de la documentation Android.

    Si vous avez toujours voulu donner votre propre nom de classe de liaison, ajoutez l'attribut de class à l'élément de data avec le nom de classe

    Les classes de reliure 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> 

    HappyCoding;

    Pour que la base de données Android fonctionne correctement, vous devez utiliser les outils Android pour gradle (com.android.tools.build:gradle)> = 1.3.0.

    Votre projet build.gradle doit donc 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 module build.gradle doit avoir ce plugin:

     apply plugin: 'com.android.databinding' 

    Après tout, vérifiez dans votre module que vous utilisez la dernière buildToolsVersion (en ce moment c'est 22.0.1). Je ne suis pas sûr que cela soit nécessaire, mais cela vous fera peut-être l'impression que vous êtes sur le "bord de la technologie" ^ _ ^:

     buildToolsVersion '22.0.1' 

    Resync gradle et reconstruisez votre projet . Il est probable que sans reconstruire le projet, vous ne pourriez pas avoir des cours SomeLayoutBinding générés.

    Dans Android Studio qui pourrait être fait à partir du menu de l'application: Build -> Rebuild project

    Dans mon cas, le lancement d'Android Studio fonctionne. C'est un bug dans Android-apt

    Un simple redémarrage ne fonctionnait pas pour moi. Je devais Invalidate Caches and Restart alors je pouvais voir les classes de liaison. C'est sous le menu File pour ceux qui ne le savent pas.

    Face au même problème.

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

    1. Classpath "com.android.databinding: dataBinder: 1.0-rc4" -> inclure ceci dans le fichier de construction du module principal
    2. Appliquez le plugin: 'com.android.databinding' au module de votre application que vous construisez
    3. Nettoyer
    4. Reconstruire. Vérifiez sous, si build-> indermediates-> votre nom de package-> dossier de liaison de données est généré contenant la classe ActivityMainBinding.

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

    1. Classpath 'com.neenbedankt.gradle.plugins: android-apt: 1.7' -> s'applique à votre module principal.
    2. Appliquez le plugin: 'com.neenbedankt.android-apt' -> à votre module d'application
    3. Apt 'com.android.databinding: 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 l' applicationId dans votre module d'application est identique au nom du package dans AndroidManifest.xml de votre module d'application. J'espère que cela t'aides.

    Un «bug» étrange dans android-studio provoque le fichier BR.java généré pour ne pas utiliser les champs @Bindable et n'a toujours que la propriété _all si un répertoire res / layout n'existe pas.

    Il m'est arrivé quand je voulais créer une application "Pas d'activité" pour avoir une bibliothèque contenant mes différentes données pouvant être lié.

    Dans mon cas, j'ai simplement inclus mon layout 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 liens de données. J'espère que cela t'aides.

     <data> <variable name="user" type="com.example.User"/> </data> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.