Mise à JOUR:
Lorsque vous avez nav graphique comme ceci:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"/>
Et vous souhaitez naviguer dans le deuxième fragment et de la rendre racine de votre graphique, préciser la prochaine NavOptions
:
NavOptions navOptions = new NavOptions.Builder()
.setPopUpTo(R.id.firstFragment, true)
.build();
Et de les utiliser pour la navigation:
Navigation.findNavController(view).navigate(R.id.action_firstFragment_to_secondFragment, bundle, navOptions);
setPopUpTo(int destinationId, boolean inclusive)
- Pop jusqu'à une destination donnée avant la navigation. Ceci ouvre tous les non-correspondance des destinations à partir de l'arrière de la pile jusqu'à ce que cette destination est trouvée.
destinationId
- La destination de pop-up à, la compensation de tous les intervenant destinations.
inclusive
- vrai également pop de la destination donnée à partir de la pile de retour.
ALTERNATIVE:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:popUpTo="@+id/firstFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"/>
Et puis, dans votre code:
findNavController(fragment).navigate(
FirstFragmentDirections.actionFirstFragmentToSecondFragment())
Vieille réponse
Obsolète: L' clearTask
d'attribut pour les actions et les associés de l'API en NavOptions
a été supprimée.
Source: https://developer.android.com/jetpack/docs/release-notes
Si vous souhaitez modifier votre fragment de racine de fragment 2
(par exemple, après avoir appuyé sur bouton de retour sur fragment 2
vous allez quitter l'application), vous devez mettre l'attribut suivant à votre action
ou destination
:
app:clearTask="true"
Pratiquement, il semble dans un façon suivante:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment"
android:label="fragment_first" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:clearTask="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"
android:label="fragment_second"/>
J'ai ajouté app:clearTask="true"
à l'action.
Maintenant, lorsque vous effectuez la navigation à partir d' fragment 1
de fragment 2
utiliser le code suivant:
Navigation.findNavController(view)
.navigate(R.id.action_firstFragment_to_secondFragment);