Lors de l'utilisation de androidx.fragment.app.FragmentContainerView
en tant que navHost au lieu d'une application régulière fragment
n'est pas en mesure de naviguer vers une destination après un changement d'orientation.
J'obtiens une erreur suivante: Java.lang.IllegalStateException: no current navigation node
Y a-t-il un problème que je devrais connaître pour l'utiliser correctement ou ma façon d'utiliser les composants de navigation est-elle incorrecte?
Activité simple xml avec une vue:
...
<androidx.fragment.app.FragmentContainerView
Android:id="@+id/nav_Host_fragment"
Android:name="androidx.navigation.fragment.NavHostFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:navGraph="@navigation/nav_simple" />
...
Code de navigation:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/nav_legislator.xml"
app:startDestination="@id/initialFragment">
<fragment
Android:id="@+id/initialFragment"
Android:name="com.example.fragmenttag.InitialFragment"
Android:label="Initial Fragment"
tools:layout="@layout/initial_fragment">
<action
Android:id="@+id/action_initialFragment_to_destinationFragment"
app:destination="@id/destinationFragment" />
</fragment>
<fragment
Android:id="@+id/destinationFragment"
Android:name="com.example.fragmenttag.DestinationFragment"
Android:label="Destination Fragment"
tools:layout="@layout/destination_fragment" />
</navigation>
Voici un dépôt github où vous pouvez facilement reproduire un bug: https://github.com/dmytroKarataiev/navHostBug
L'erreur no current navigation node
Se produit lorsqu'il n'y a pas de jeu de graphes et que vous essayez d'appeler navigate()
. Si cela ne se produit que lorsque vous utilisez FragmentContainerView
et après un changement de configuration, cela serait lié à ce bogue , qui est corrigé et dont la sortie est prévue avec Navigation 2.2.0- rc03.
Pour contourner ce problème, vous pouvez revenir à <fragment>
Ou supprimer app:navGraph="@navigation/nav_simple"
Et appeler à la place navController.setGraph(R.navigation.nav_simple)
.