Android - de la liaison de données - Comment et quand les classes de Liaison sera généré?
Guide De La Liaison De Données États
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 Liaison de la classe , ici, dire ActivityMainBinding, sera généré. J'ai des erreur de compilation. "ne peut pas résoudre ActivityMainBinding".
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
Toute aide est appréciée. Grâce
- Ya je sais, il est en version bêta. Je veux juste essayer it out.
- Selon ce Paragraphe, il est ok à partir de Google, du point de vue de publier des applications utilisant cette bibliothèque. Vous avez juste à vous tenir au courant de l'état de beta et les implications: *** les Développeurs doivent se sentir libres de publier des applications développées avec la Liaison de Données de la bibliothèque, la version bêta, avec les mises en garde que le standard du kit SDK d'Android et Google Play conditions de service s'appliquent, et c'est toujours une bonne idée pour tester votre application à fond lors de l'adoption de nouvelles bibliothèques ou des outils.
- Quelqu'un peut-il point à l'endroit où les classes générées/les fichiers sont situés dans le projet?
- Juste pour l'exhaustivité : tous les code généré est à l'intérieur "module_dir"/build/générée. Plus ci-dessous comme par ressources, il est res répertoire que par des classes java il y a de la src avec des affinités (par exemple, la liaison de données). Cette structure est générée par gradle 2.2+
- Dans mon cas, le databingclass est mis à jour en temps opportun s'il est l'élément <données></données> dans le fichier xml, ou il est mis à jour seulement après la réouverture du studio IDE.
- 3 ans plus tard et Android Studio continue à ne pas générer la liaison des fichiers fiables. PRO ASTUCE: éviter de MVVM en Android.
Vous devez vous connecter pour publier un commentaire.
Qu'est-ce que votre mise en page nom?
Ce que cela signifie, c'est que le nom de la classe dépend de votre mise en page du nom
activity_main.xml -> ActivityMainBinding.java
Je pense que votre nom d'activité est "main_activity", de sorte que la liaison de généré nom de classe doit être MainActivityBinding pas ActivityMainBinding
Quand ce n'est pas la génération de la liaison de la classe, j'ai redémarrer Android studio. Ensuite, la liaison de la classe sera généré. N'est-il pas causé par le cache de android studio?
BTW, si vous utilisez
android-apt
, s'il vous plaît vérifier. Car il sera la cause de la liaison de la classe à ne pas être générer.\Project\app\build\generated\source\apt\development\debug\project\android\app\databinding
CEPENDANT Android Studio 3.1.3 c'est la dénonciation de la classe en tant que Inconnu. Invalider les Caches et le Redémarrage n'est pas de le fixer.com.intellij.psi.PsiInvalidElementAccessException: Element: class com.intellij.psi.impl.source.xml.XmlFileImpl because: different providers
. Quelle perte de temps !Avez-vous de mettre à jour votre fichier de mise en page pour la liaison de données? Ils sont générées uniquement pour les modèles qui ont la liaison de données.
Il faut commencer avec un
layout
balise qui a 2 balises enfants (données & votre vue de la racine).Quelque chose comme ceci:
Lorsque votre présentation a cette forme, AndroidStudio l'auto complète de la classe. Aussi, par défaut, il est généré en
<your.app.package>.databinding
paquet.Essayez de renommer la mise en page à
main_activity.xml
.Dans mon cas, il n'a pas de travail pour générer de liaison de la classe pour "activity_main.xml".
Mais en renommant le fichier de mise en page pour
main_activity.xml
a très bien fonctionné.Règle
Nom du modèle est en
snake_case
, et a généré de liaison nom de la classe seraCamelCase
.Problème
Voici hack
Lorsque vous N'obtenez pas l'Importation Suggestion
Lorsque vous n'obtenez pas l'importation de la suggestion. Importer manuellement votre liaison de la classe comme ça. (IDE souvent ne montrent pas de suggestions pour les classes de liaison)
Ligne d'importation affiche toujours l'erreur?
Rapide hack pour générer de la classe binding-
Noter que je recommande fermer et ouvrir de récente car elle prend moins de temps que Reconstruire /Redémarrer IDE.
Rapide hack pour générer des variables de layout dans la liaison de la classe
Si vous avez encore des questions. Laissez-moi savoir dans les commentaires, ou voir cette réponse pour une meilleure compréhension.
Assurez-vous que la mise en page de l':
Est dans le activity_main.xml si vous êtes à la recherche pour ActivityMainBinding. Dans la plupart des passe-partout de projets vous définissez votre contenu en vue de activity_main.xml mais alors gonfler vous fragment_main.xml.
Si vous mettez votre
<data>
dans fragment_main.xml disposition de la classe qui est généré sera FragmentMainBinding.Remarque: Cela peut sembler évident, après la lecture, mais c'est quelque chose qui peut être facilement négligé lors de la suite de l'android à la documentation.
Dans mon cas, le Redémarrage de Android Studio ne fonctionne pas. Il est bug sur android-apt
Si vous jamais eu envie de donner votre propre Liaison de nom de classe juste ajouter
class
attribut à ladata
élément avec un nom de classePour android de liaison de données pour fonctionner correctement, vous devez utiliser la version d'android outils pour gradle (com.android.outils.construire:gradle) >=1.3.0.
De sorte que votre projet de construction.gradle doit ressembler à:
Et le module de construire.gradle devez disposer du plugin:
Après tout, vérifiez dans votre module, vous êtes en utilisant les dernières buildToolsVersion (pour l'instant il est 22.0.1). Je ne suis pas sûr que ce soit nécessaire, mais il est possible qu'il vous fera vous sentir bien sur vous êtes sur la "à la pointe de la technologie" ^_^ :
Resync gradle et reconstruire votre projet. Il est fort possible que sans reconstruction de projet, vous risquez de ne pas obtenir
SomeLayoutBinding
classes générées.Dans Android Studio qui pourrait être fait à partir du menu des applications:
Build -> Rebuild project
Face à la même question.
Raison pour laquelle "ne peut pas résoudre ActivityMainBinding", c'est que votre Liaison de fichier n'est pas généré. Essayez de nettoyer et reconstruire projet.
Aussi, assurez-vous d'avoir bien suivi les étapes suivantes :
Sinon, si vous voulez voir le source généré.
Ces classes seront générés sur la première génération.
Assurez-vous également que le identificateur applicationid dans votre module d'application est le même que le nom du package dans AndroidManifest.xml de votre application module.
Espérons que cette aide.
Mon expérience est que Android Studio 3.1.3 généré le databinding classe après que j'ai cliqué sur "Build > Projet de Reconstruction". Le fichier est stocké dans:
\Projet\app\build\généré\source\apt\développement\debug\projet\android\app\de liaison de données
Cependant, Android Studio encore signalé la classe binding "Inconnu" dans le code source.
Enfin la solution, je manuellement ajouté le importation déclaration:
Juste un simple redémarrage ne fonctionne pas pour moi. J'ai dû
Invalidate Caches and Restart
ensuite, j'ai pu voir les classes de liaison. C'est en vertu de laFile
menu pour ceux qui ne le savent pas.Un drôle de "bug" dans android studio provoque l'généré BR.java fichier de ne pas utiliser le
@Bindable
champs et toujours uniquement le_all
bien si une res/layout répertoire n'existe pas.Il m'est arrivé lorsque j'ai voulu créer un "Non Activité" Application d'une bibliothèque qui contenait mes différents bindable de données.
Dans mon cas, j'ai juste fermé ma mise en page xml dans
<layout></layout>
balises et c'est tout, sans l'ajout de la balise de données, j'ai réussi à générer des Liaisons de Données. Espérons que cette aide.//Rappelez-vous besoin
Build-> Projet de Reconstruction de
vérifier les champs du niveau d'accès de votre objet, quand j'ai tourné public, il a travaillé ici
Si vous ne voulez pas redémarrer android studio, une solution est de renommer activity_main.xml pour quelque chose d'autre.e.g activity_m.xml et puis rétablissez activity_main.xml. Il est beaucoup plus rapide que de le redémarrer android studio.
Pour renommer, cliquez-droit sur activity_main.xml et choisir Refactoriser => Renommer