2
votes

Comment configurer Nav Controller dans AndroidX?

J'utilise la présentation d'activité suivante avec un fragment et un BottomNavigationView:

implementation 'android.arch.navigation:navigation-fragment:1.0.0-rc02'
implementation 'android.arch.navigation:navigation-ui:1.0.0-rc02'

Dans mon activité, je suis essayez de configurer le contrôleur de navigation, mais j'obtiens l'erreur suivante:

Impossible de résoudre la méthode 'setupWithNavController (androidx.navigation.NavController)'

Voici ce que j'ai essayé:

navController = Navigation.findNavController(this, R.id.fragment);
BottomNavigationView bnv = findViewById(R.id.bottom_navigation_view);
bnv.setupWithNavController(navController); //Error
NavigationUI.setupActionBarWithNavController(this, navController);

Mes dépendances:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@+id/fragment"
        android:layout_weight="1"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:newGraph="@navigation/navigation_bottom"
        app:defaultNavHost="true"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bottom_navigation_view"
        app:menu="@menu/bottom_navigation_menu"/>
</LinearLayout>

Comment puis-je câbler ça? Merci!


0 commentaires

3 Réponses :


1
votes

Vérifiez que ces deux propriétés sont activées dans votre gradle.properties

implementation 'androidx.core:core: 1.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2

Update^

Et vérifiez que vous utilisez également ces bibliothèques.

/ p>

android.useAndroidX=true

android.enableJetifier=true


4 commentaires

Merci mais veuillez indiquer l'endroit exact où je dois ajouter ces lignes.


Dans le fichier gardle.properties.


Je viens d'ajouter les deux lignes de code dans gradle.properties ci-dessous org.gradle.jvmargs = -Xmx1536m et tout s'est foiré: (Ai-je ajouté au bon endroit?


Pouvez-vous indiquer l'endroit précis où ajouter android.useAndroidX = true et android.enableJetifier = true ? Juste ajouté les deux dépendances et avoir le même comportement.



7
votes

La syntaxe bnv.setupWithNavController utilise une méthode d'extension Kotlin - vous devez utiliser Kotlin et les dépendances -ktx pour avoir accès aux extensions Kotlin selon la note dans le Documentation sur la déclaration des dépendances :

NavigationUI.setupWithNavController(bnv, navController);

Si vous écrivez du code Java, vous devez utiliser directement les méthodes NavigationUI:

implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0-rc02'
implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0-rc02'


7 commentaires

Il utilise Java.


Je code en Java et non en Kotlin. Juste ajouté comme test à la fois et j'ai la même erreur.


Ajout d'une note indiquant que vous devez utiliser la syntaxe NavigationUI pour l'utilisation de Java.


Obtention de l'erreur suivante: Impossible de résoudre la méthode 'setupWithNavController (com.google.android.material.bottomna‌ vigation.BottomNavig‌ ationView, androidx.navigation.NavController)'


On dirait que vous n'utilisez pas du tout AndroidX ou que vous n'avez pas correctement migré vers AndroidX selon suivez les instructions ou vous devrez peut-être effectuer un nettoyage et une reconstruction après la migration vers AndroidX.


Oui, le problème était que je n'avais pas migré correctement vers AndroidX et NavigationUI.setupWithNavController (bnv, navController); a fait l'affaire. Merci beaucoup!


J'ai également essayé mon code dans Kotlin et ces deux dépendances sont obligatoires comme expliqué dans votre réponse. Également voté. Merci encore @ianhanniballake



0
votes

Ce type de lignes (avec implémentation) peut être ajouté dans la section

android.useAndroidX=true 
android.enableJetifier=true

dans app / build.gradle. Et ce type de lignes avec (android.useAndroidX = true et android.enableJetifier = true) peut être ajouté dans gradle.properties

dependencies {
   implementation 'androidx.core:core: 1.0.1'
   implementation 'androidx.appcompat:appcompat:1.0.2

}

Mais veuillez vérifier avant que cela n'existe pas déjà :)


0 commentaires