web-dev-qa-db-fra.com

Android Référence non résolue: findNavController

J'utilise Kotlin et ai toutes les références ajoutées dans mon projet.

// Navigation
implementation "Android.Arch.navigation:navigation-common-ktx:$rootProject.nav_version"
implementation "Android.Arch.navigation:navigation-fragment-ktx:$rootProject.nav_version"
implementation "Android.Arch.navigation:navigation-runtime-ktx:$rootProject.nav_version"
implementation "Android.Arch.navigation:navigation-ui-ktx:$rootProject.nav_version"

J'ai aussi ces derniers sur le build.gradle

apply plugin: 'kotlin-Android' apply plugin: 'kotlin-Android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs'

Et je l'utilise comme ça dans mon fragment

class HomeFragment : BaseFragment(){

    ...

    override fun onCategoryItemClicked(category: Category) {
        view.findNavController()?.navigate(R.id.phrasesFragment)
    }
}

Je peux aussi voir cette extension générée (fichier)

fun Fragment.findNavController(): NavController =
    NavHostFragment.findNavController(this)
7
Amir Abdi

Après de nombreux essais et erreurs, j'ai trouvé la source du problème. la mise à niveau de mon grade à gradle:3.3.0-alpha06 était la clé. Je reviens à la version précédente et cela fonctionne bien maintenant ..__ Donc, je pense que quelque chose se passe là-bas qui doit être corrigé par #Google.

dependencies {
    classpath 'com.Android.tools.build:gradle:3.3.0-alpha05'

En passant, lors de l’utilisation de la dernière version du logiciel (au moment de la rédaction de ce document, j’entends gradle:3.3.0-alpha06), cela fonctionnera.

    Navigation.findNavController(view!!).navigate(R.id.phrasesFragment)

au lieu de 

override fun onCategoryItemClicked(category: Category) {
    view.findNavController()?.navigate(R.id.phrasesFragment)
}
1
Amir Abdi