Bir varış noktasına geri dönmeniz gereken yerin açık bir örneği, navigasyonun dairesel biçimde olmasıdır. Bu dokümanda, söz konusu kullanım alanı özetlenmektedir.
Senaryo
Uygulamanızın üç hedefi olduğunu düşünün: A, B ve C. Ayrıca A'dan B'ye, B'den C'ye, C'den de A'ya dönüşen işlemler de vardır. İlgili gezinme grafiği aşağıdaki gibi görünür:
NavController
, her gezinme işlemiyle birlikte yeni hedefi arka yığına ekler. Yani şemadaki akışta tekrar tekrar gezinmek, arka yığınınızın her bir hedeften birden fazla küme içermesine neden olur: A, B, C, A, B, C, A, B, C.
Çözüm
Arka yığınınızda tekrarı önlemek için NavController.navigate()
çağrınızda veya gezinme işleminizde popUpTo()
ve inclusive
öğelerini belirtin.
C hedefine ulaştıktan sonra, arka yığının her hedefin bir örneğini içerdiğini düşünün: A, B, C. Kullanıcıyı C hedefinden A hedefine yönlendiren işlem veya navigate()
çağrısında popUpTo()
ve inclusive
değerlerini tanımladığınızdan emin olmanız gerekir.
Bu durumda, kullanıcı C hedefinden A hedefine geri gittiğinde NavController
, A'da da görünür. Bu da B ve C'yi yığından kaldırdığı anlamına gelir. inclusive = true
ile ilk A da çıkarılarak yığını etkili bir şekilde temizlenir.
Oluşturma uygulaması
Aşağıda, Oluşturma'daki dairesel popUpTo()
için çözümün uygulanması verilmiştir:
// When creating your `NavGraph` in your `NavHost`.
composable("c") {
DestinationC(
onNavigateToA = {
navController.navigate("a") {
popUpTo("a") {
inclusive = true
}
}
},
)
}
Görüntülemelerin uygulanması
Aşağıda, Views'ta döngüsel popUpTo
için çözümün uygulanması verilmiştir:
<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>