Impossible d'obtenir la vue racine à partir de la liaison de données après avoir activé le plug-in Safe-Args

15

Je travaille sur une application Android utilisant dataBinding et j'essaie actuellement d'ajouter le plug-in safe-args, mais après avoir activé le plug-in, je ne peux plus obtenir la vue racine via binding.root - Android Studio donne l'erreur:

Unresolved Reference
None of the following candidates is applicable because of a receiver type mismatch:
* internal val File.root: File defined in kotlin.io

Comment puis-je faire en sorte que la liaison de données et les arguments sûrs fonctionnent correctement ensemble?

Notez que pendant que l'extrait de code est dans Kotlin, je prendrai volontiers les réponses Java. Pas aussi confortable en Java mais je peux facilement le lire et le traduire.

Je n'ai pas pu trouver quelqu'un d'autre avec le même problème en recherchant le message d'erreur et les "arguments sûrs" sur Google. J'ai essayé d'abord avec le chemin de classe répertorié dans les documents Android ici: https://developer.android.com/guide/navigation/navigation-pass-data

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0"

Et puis aussi trouvé un tutoriel suggérant que j'utilise:

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha07"

Les deux avaient le même problème: binding.root a donné une erreur avec le plugin activé

Voici mon onCreateView () pour mon fragment. Cette ligne de retour fonctionne correctement lorsque Safe-Args n'est pas activé et ne fonctionne pas lorsqu'il est activé

   override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    binding = DataBindingUtil.inflate(inflater, R.layout.fragment_encoder, container, false)

    return binding.root
}

Toute aide pour résoudre ou comprendre ce problème est la plus appréciée!

Hannah S.
la source

Réponses:

11

J'ai le même problème, il est tellement câblé pour moi, mais renommer la mise en page fonctionnera à nouveau, essayez-le: D

MarkWang
la source
2
Cela a fait l'affaire, assez étrangement, merci. Pour d'autres qui viennent ici avec le même problème, tout ce que j'avais à faire était de refactoriser> renommer le fichier XML de mise en page associé à la classe qui ne reconnaissait pas binding.root. Vous devrez également renommer le type de classe généré automatiquement pour la liaison en conséquence. Une fois que j'ai fait cela, tout a fonctionné correctement et j'ai même pu renommer le nom d'origine. Je ne sais pas comment cela a pu reconstruire le projet.
Hannah S.
De plus, si vous êtes ici en raison de problèmes avec les arguments sûrs, vous voudrez peut-être plutôt utiliser un ViewModel et LiveData partagés. C'est ce que j'utilise maintenant parce que je devais continuer quand je suis resté coincé sur des arguments sûrs et je suis beaucoup plus heureuse
Hannah S.
24

J'ai le même problème et j'ai enfin essayé

Fichier -> Caches / redémarrage non valides

Ça marche pour moi.

Daniel Chin
la source