In my app i have used one activity and four fragment . In this app I used navigation component. My fragment loading sequence is A->B->C->D
In fragment D On device back button press I want to remove fragment C from backstack so that fragment B can open. Any one suggest me how can I do Thank you in advance
this is my navigation_graph.xml
<?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/navigation_graph"
app:startDestination="@id/firstFragment"
>
<fragment
android:id="@+id/firstFragment"
android:name="com.education.javaprogramming.fragments.MainFragment"
android:label="fragment_first"
tools:layout="@layout/activity_main" >
<action
android:id="@+id/action_firstFragment_to_displayList1Fragment"
app:destination="@id/displayList1Fragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<action
android:id="@+id/action_firstFragment_to_displayList2Fragment"
app:destination="@id/displayList2Fragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<action
android:id="@+id/action_firstFragment_to_helpFragment"
app:destination="@id/helpFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<action
android:id="@+id/action_firstFragment_to_quizzFragment"
app:destination="@id/quizzFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
</fragment>
<fragment
android:id="@+id/displayList1Fragment"
android:name="com.education.javaprogramming.fragments.DisplayList1Fragment"
android:label="fragment_display_list1"
tools:layout="@layout/fragment_display_list1"
>
<argument
android:name="position1"
app:argType="integer" />
<action
android:id="@+id/action_displayList1Fragment_to_firstFragment"
app:destination="@id/firstFragment" />
<argument
android:name="name"
app:argType="string" />
<action
android:id="@+id/action_displayList1Fragment_to_displayList2Fragment"
app:destination="@id/displayList2Fragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
</fragment>
<fragment
android:id="@+id/displayList2Fragment"
android:name="com.education.javaprogramming.fragments.DisplayList2Fragment"
android:label="fragment_display_list2"
tools:layout="@layout/fragment_display_list2" >
<action
android:id="@+id/action_displayList2Fragment_to_displayList1Fragment"
app:destination="@id/displayList1Fragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<action
android:id="@+id/action_displayList2Fragment_to_firstFragment"
app:destination="@id/firstFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<argument
android:name="position1"
app:argType="integer" />
<argument
android:name="position2"
app:argType="integer" />
<argument
android:name="name"
app:argType="string" />
<action
android:id="@+id/action_displayList2Fragment_to_displayListInDeFragment"
app:destination="@id/displayListInDeFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
</fragment>
<fragment
android:id="@+id/displayListInDeFragment"
android:name="com.education.javaprogramming.fragments.DisplayListInDeFragment"
android:label="fragment_display_list_in_de"
tools:layout="@layout/fragment_display_list_in_de" >
<action
android:id="@+id/action_displayListInDeFragment_to_displayList2Fragment"
app:destination="@id/displayList2Fragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<argument
android:name="position1"
app:argType="integer" />
<argument
android:name="position2"
app:argType="integer" />
<argument
android:name="position3"
app:argType="integer" />
<argument
android:name="name"
app:argType="string" />
</fragment>
<fragment
android:id="@+id/helpFragment"
android:name="com.education.javaprogramming.fragments.HelpFragment"
android:label="fragment_help"
tools:layout="@layout/fragment_help" >
<action
android:id="@+id/action_helpFragment_to_firstFragment"
app:destination="@id/firstFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<argument
android:name="position1"
app:argType="integer" />
<argument
android:name="name"
app:argType="string" />
<action
android:id="@+id/action_helpFragment_to_aboutFragment"
app:destination="@id/aboutFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
</fragment>
<fragment
android:id="@+id/aboutFragment"
android:name="com.education.javaprogramming.fragments.AboutFragment"
android:label="fragment_about"
tools:layout="@layout/fragment_about" >
<action
android:id="@+id/action_aboutFragment_to_helpFragment"
app:destination="@id/helpFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
</fragment>
<fragment
android:id="@+id/quizzFragment"
android:name="com.education.javaprogramming.fragments.QuizzFragment"
android:label="fragment_quizz"
tools:layout="@layout/fragment_quizz" >
<action
android:id="@+id/action_quizzFragment_to_firstFragment"
app:destination="@id/firstFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<action
android:id="@+id/action_quizzFragment_to_displayExamFragment"
app:destination="@id/displayExamFragment" />
</fragment>
<fragment
android:id="@+id/displayExamFragment"
android:name="com.education.javaprogramming.fragments.DisplayExamFragment"
android:label="fragment_display_exam"
tools:layout="@layout/fragment_display_exam" >
<action
android:id="@+id/action_displayExamFragment_to_quizzFragment"
app:destination="@id/quizzFragment"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit"
/>
<argument
android:name="position1"
app:argType="integer" />
<action
android:id="@+id/action_displayExamFragment_to_resultFragment"
app:destination="@id/resultFragment" />
</fragment>
<fragment
android:id="@+id/resultFragment"
android:name="com.education.javaprogramming.fragments.ResultFragment"
android:label="fragment_result"
tools:layout="@layout/fragment_result" >
<action
android:id="@+id/action_resultFragment_to_quizzFragment"
app:destination="@id/quizzFragment" />
<argument android:name="givenAnswers"
app:argType="reference"
/>
<argument android:name="actualAnswers"
app:argType="reference"
/>
</fragment>
</navigation>
launchSingleTop. var launchSingleTop: Boolean. Whether this navigation action should launch as single-top (i.e., there will be at most one copy of a given destination on the top of the back stack). This functions similarly to how android. content.
When navigating back to destination A, we also popUpTo A, which means that we remove B and C from the stack while navigating. With app:popUpToInclusive="true" , we also pop that first A off of the stack, effectively clearing it.
You can use navController.popBackStack(int destinationId,bool inclusive) method, (please mind boolean
value)
Attempts to pop the controller's back stack back to a specific destination. eg.
navController.popBackStack(R.id.dest_id_of_B, true)
You should use
app:popUpTo="@id/id_of_c_fragment"
app:popUpToInclusive="true"
app:popUpTo="@id/id_of_d_fragment"
app:popUpToInclusive="true"
in navigation graph in action scope.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With