Kreisförmige Navigation

Ein klares Beispiel dafür, wo Sie zu einem Ziel zurückkehren müssen, ist, ist die Navigation kreisförmig. In diesem Dokument wird dieser Anwendungsfall beschrieben.

Szenario

Angenommen, Ihre App hat drei Ziele: A, B und C. Sie enthält auch Aktionen, von A nach B, B nach C und C zurück nach A führen. Das entsprechende Navigationsdiagramm sieht wie folgt aus:

<ph type="x-smartling-placeholder">
</ph> Demonstration der kreisförmigen Navigation
Abbildung 1: Ein kreisförmiges Navigationsdiagramm mit drei Zielen: A, B und C.

Bei jeder Navigationsaktion fügt NavController das neue Ziel zur Back Stack ab. Wenn Sie also wiederholt durch den Ablauf im Diagramm navigieren, da Ihr Back-Stack mehrere Sätze von jedem Ziel enthalten würde: A, B, C, A, B, C, A, B, C.

Lösung

Um Wiederholungen im Back-Stack zu vermeiden, geben Sie popUpTo() und inclusive in Ihrem Anruf an NavController.navigate() oder in Ihrem Navigationsaktion.

Stellen Sie sich einen Fall vor, bei dem der Back-Stack nach Erreichen von Ziel C einen Instanz jedes Ziels: A, B, C. Sie müssen sicherstellen, dass Sie popUpTo() und inclusive in der Aktion oder im Call an navigate(), der die von Ziel C zu Ziel A.

Wenn der Nutzer in diesem Fall von Ziel C zurück zu Ziel A wechselt, wird „NavController“ ebenfalls als „A“ eingeblendet. Das bedeutet, dass B und C auf dem Stack. Bei inclusive = true hebt es auch das erste A hervor, den Stapel löschen.

Compose-Implementierung

Hier sehen Sie die Implementierung der Lösung für das Rundschreiben popUpTo() in Schreiben:

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

Implementierung von Aufrufen

Hier sehen Sie die Implementierung der Lösung für das Rundschreiben popUpTo in Aufrufe:

<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>