A clear example of where you need to pop back to a destination is when your
navigation is circular. This document outlines that use case.

## Scenario

Imagine your app has three destinations: A, B, and C. It also has actions that
lead from A to B, B to C, and C back to A. The corresponding navigation graph
appears as follows:
![a demonstration of circular navigation](https://developer.android.com/static/images/topic/libraries/architecture/navigation-getting-started-pop.png) **Figure 1.** A circular navigation graph with three destinations: A, B, and C.

With each navigation action, the `NavController` adds the new destination to the
back stack. As such, repeatedly navigating through the flow in the diagram would
cause your back stack would to contain multiple sets of each destination: A, B,
C, A, B, C, A, B, C.

## Solution

To avoid repetition in your back stack, specify [`popUpTo()`](https://developer.android.com/guide/navigation/backstack#pop) and
[`inclusive`](https://developer.android.com/guide/navigation/backstack#pop-back-destination) in your call to `NavController.navigate()` or in your
navigation action.

Consider a case where after reaching destination C, the back stack contains one
instance of each destination: A, B, C. You need to ensure that you have defined
`popUpTo()` and `inclusive` in the action or call to `navigate()` that takes the
user from destination C to destination A.

In this case, when the user navigates from destination C back to destination A,
the `NavController` also pops up to A. This means that it removes B and C from
the stack. With `inclusive = true`, it also pops the first A, effectively
clearing the stack.
| **Note:** This is similar to calling [`popBackStack()` and passing `inclusive`](https://developer.android.com/guide/navigation/backstack#pop-back-destination).

### Compose implementation

The following is the implementation of the solution for circular `popUpTo()` in
Compose:  

    // When creating your `NavGraph` in your `NavHost`.
    composable("c") {
        DestinationC(
            onNavigateToA = {
              navController.navigate("a") {
                popUpTo("a") {
                  inclusive = true
                }
              }
            },
        )
    }

### Views implementation

The following is the implementation of the solution for circular `popUpTo` in
Views:  

    <fragment
        android:id="@+id/c"
        android:name="com.example.myapplication.C"
        android:label="fragment_c"
        tools:layout="@layout/fragment_c">

        \<action
    android:id="@+id/action_c_to_a"
    app:destination="@id/a"
    app:popUpTo="@+id/a"
    app:popUpToInclusive="true"/\>
    </fragment>