Root View kann nicht aus der Datenbindung abgerufen werden, nachdem das Plugin für sichere Argumente aktiviert wurde

15

Ich arbeite mit dataBinding an einer Android-App und versuche derzeit, das Plugin "safe-args" hinzuzufügen. Nach dem Aktivieren des Plugins kann ich die Root-Ansicht nicht mehr über binding.root abrufen. Android Studio gibt den Fehler aus:

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

Wie kann ich Datenbindung und sichere Argumente dazu bringen, gut zusammen zu spielen?

Beachten Sie, dass ich, während sich das Code-Snippet in Kotlin befindet, gerne Java-Antworten entgegennehme. Nicht so komfortabel in Java, aber ich kann es leicht lesen und übersetzen.

Ich konnte niemanden mit dem gleichen Problem finden, indem ich die Fehlermeldung und "sichere Argumente" googelte. Ich habe es zuerst mit dem in den Android-Dokumenten hier aufgeführten Klassenpfad versucht: https://developer.android.com/guide/navigation/navigation-pass-data

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

Und dann habe ich auch ein Tutorial gefunden, das mir vorschlägt:

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

Beide hatten das gleiche Problem: binding.root gab bei aktiviertem Plugin einen Fehler aus

Hier ist mein onCreateView () für mein Fragment. Diese Rückleitung funktioniert ordnungsgemäß, wenn safe-args nicht aktiviert ist, und funktioniert nicht, wenn sie aktiviert ist

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

    return binding.root
}

Jede Hilfe beim Lösen oder Verstehen dieses Problems wird sehr geschätzt!

Hannah S.
quelle

Antworten:

11

Ich habe das gleiche Problem, es ist für mich so verdrahtet, aber das Umbenennen des Layouts funktioniert wieder. Versuchen Sie es: D.

MarkWang
quelle
2
Das hat seltsamerweise den Trick getan, danke. Für andere, die mit demselben Problem hierher kamen, musste ich lediglich die Layout-XML-Datei umbenennen, die der Klasse zugeordnet war, die die Datei binding.root nicht erkannte. Sie müssen auch den automatisch generierten Klassentyp für die Bindung entsprechend umbenennen. Sobald ich das getan habe, hat alles richtig funktioniert und ich konnte sogar wieder in den ursprünglichen Namen umbenennen. Ich bin mir nicht sicher, wie dies zu einem Wiederaufbau des Projekts geführt hat.
Hannah S.
Auch wenn Sie aufgrund von Problemen mit Safe-Args hier sind, sollten Sie stattdessen ein freigegebenes ViewModel und LiveData verwenden. Das ist es, was ich jetzt benutze, weil ich weitermachen musste, als ich auf sicheren Argumenten feststeckte und viel glücklicher bin
Hannah S.
24

Ich habe das gleiche Problem und habe es endlich versucht

Datei -> Ungültige Caches / Neustart

Für mich geht das.

Daniel Chin
quelle