Dairesel gezinme

Hedefe dönmeniz gereken durumlara örnek olarak, gezinme daireseldir. Bu dokümanda, söz konusu kullanım alanı özetlenmektedir.

Senaryo

Uygulamanızın A, B ve C olmak üzere üç hedefi olduğunu düşünün. Aynı zamanda C'den A'ya, B'den C'ye ve C'den A'ya doğru gider. İlgili gezinme grafiği şu şekilde görünür:

dairesel gezinme gösterimi
Şekil 1. A, B ve C olmak üzere üç hedefi içeren dairesel bir gezinme grafiği.

Her gezinme işleminde, NavController yeni hedefi gösterir. Dolayısıyla, diyagramdaki akışı tekrarlamak, çünkü arka yığınınız her hedef için birden çok grup içerir: A, B, C, A, B, C, A, B, C

Çözüm

Arka yığınınızda tekrar olmasını önlemek için popUpTo() ve inclusive, NavController.navigate() ile yaptığınız görüşmede veya gezinme işlemine göre değişir.

C hedefine ulaştıktan sonra, arka yığının bir her hedef örneği: A, B, C. Hesap oluşturma sürecinde popUpTo() ve inclusive, şu işlemi yapan navigate() adlı işlemde veya çağrıda kullanıcısını hedef C'den A hedefine

Bu durumda, kullanıcı C hedefinden A hedefine geri döndüğünde, NavController simgesi de A'ya çıkıyor. Bu, B ve C'nin yardımcı olur. inclusive = true ile ilk A'yı da etkili biçimde öne çıkarıyor. grubu temizler.

Uygulama oluşturma

Aşağıda, çevrimsel popUpTo() için çözümün Oluştur:

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

Görünümlerin uygulanması

Aşağıda, çevrimsel popUpTo için çözümün Görüntülenme sayısı:

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