Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove only one fragment from backstack in fragment navigation component?

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>
like image 366
Sushant Bansode Avatar asked Apr 29 '19 08:04

Sushant Bansode


People also ask

What is launchSingleTop in navigation component?

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.

What is popUpToInclusive?

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.


2 Answers

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)
like image 119
Bharatesh Avatar answered Oct 11 '22 02:10

Bharatesh


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.

like image 36
khamidjon Avatar answered Oct 11 '22 02:10

khamidjon