Supposons que j'ai 4 fragments: A, B, C, X et que je puisse naviguer entre eux de cette manière:
... -> A -> C -> X and ... -> B -> C -> X
Mais quand je suis dans le fragment X, appelez mNavController.navigateUp()
Je veux ignorer le fragment C et aller au fragment A ou B. Que dois-je faire?
UPD: J'ai besoin d'une solution uniquement pour le composant d'architecture de navigation https://developer.Android.com/topic/libraries/architecture/navigation/ Merci!
Donné R.id.fragmentC
est le nom de la destination C, à partir de la destination X, vous pouvez effectuer les opérations suivantes:
NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentC, true);
Cela devrait faire sortir toutes les destinations de la pile avant C, et laisser A ou B au-dessus de la pile.
Vous pouvez également utiliser app:popUpTo
et app:popUpToInclusive
attributs dans la navigation xml
ressource pour nettoyer automatiquement la pile arrière lors de l'exécution de certaines transactions, donc le bouton de sauvegarde/ramènera votre utilisateur au fragment racine.
<fragment
Android:id="@+id/fragment1"
Android:name="com.package.Fragment1"
Android:label="Fragment 1">
<action
Android:id="@+id/action_fragment1_to_fragment2"
app:destination="@id/fragment2"
app:popUpTo="@id/fragment1"
app:popUpToInclusive="true / false" />
</fragment>
Comme mentionné par @bentesha, cela fonctionne de la manière suivante: les fragments seront éclatés jusqu'à fragmentC inclusivement.
Vous pouvez également y parvenir comme ci-dessous:
NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentA, false);
OR
NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentB, false);
Et cela apparaîtra exclusivement sur fragmentA/fragmentB, je pense que c'est la manière la plus descriptive pour vous et pour les autres de comprendre.