गोल नेविगेशन

आपको गंतव्य पर वापस कब जाना है, इसका एक स्पष्ट उदाहरण यह है कि नेविगेशन गोल होता है. इस दस्तावेज़ में, इस्तेमाल के उदाहरण के बारे में बताया गया है.

स्थिति

मान लें कि आपके ऐप्लिकेशन में तीन डेस्टिनेशन हैं: A, B, और C. इसमें ऐसी कार्रवाइयां भी हैं A से B, B से C, और C से A तक ले जाते हैं. संबंधित नेविगेशन ग्राफ़ इस तरह दिखेगा:

सर्कुलर नेविगेशन का डेमो
पहली इमेज. तीन डेस्टिनेशन: A, B, और C वाला एक सर्कुलर नेविगेशन ग्राफ़.

हर नेविगेशन कार्रवाई के साथ, NavController नया डेस्टिनेशन पिछली गतिविधियां. इसलिए, डायग्राम में फ़्लो के बीच बार-बार नेविगेट करने पर क्योंकि आपके बैक स्टैक में हर डेस्टिनेशन के कई सेट होंगे: A, B, C, A, B, C, A, B, C.

समाधान

पिछली गतिविधियों में दोहराव से बचने के लिए, popUpTo() और inclusive के हिसाब से NavController.navigate() या नेविगेशन कार्रवाई.

ऐसा मामला देखें जिसमें डेस्टिनेशन C पर पहुंचने के बाद, पिछली गतिविधियों में एक शामिल होता है हर डेस्टिनेशन का इंस्टेंस: A, B, C. आपको यह सुनिश्चित करना होगा कि आपने popUpTo() और inclusive कार्रवाई में शामिल हैं या navigate() को किए गए कॉल में शामिल हैं डेस्टिनेशन C से डेस्टिनेशन A तक के उपयोगकर्ता.

इस मामले में, जब उपयोगकर्ता डेस्टिनेशन C से वापस डेस्टिनेशन A पर जाता है, तो NavController भी पॉप-अप होने के बाद A पर जाएँ. इसका मतलब है कि यह B और C को स्टैक को हटा दिया जाता है. inclusive = true के साथ, यह पहले A को भी असरदार तरीके से पॉप करता है स्टैक को साफ़ करने के लिए किया जा सकता है.

कंपोज़ की सुविधा लागू करने का तरीका

सर्कुलर popUpTo() के लिए, समाधान को इस तरह लागू किया गया है लिखें:

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

व्यू लागू करना

सर्कुलर popUpTo के लिए, समाधान को इस तरह लागू किया गया है दृश्य:

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