বৃত্তাকার নেভিগেশন

যখন আপনার নেভিগেশন বৃত্তাকার হয় তখন আপনাকে একটি গন্তব্যে ফিরে যেতে হবে তার একটি স্পষ্ট উদাহরণ। এই নথিটি কেস ব্যবহার করে এমন রূপরেখা দেয়।

দৃশ্যকল্প

কল্পনা করুন আপনার অ্যাপের তিনটি গন্তব্য রয়েছে: A, B, এবং C। এটিতে এমন ক্রিয়া রয়েছে যা A থেকে B, B থেকে C এবং C থেকে A-তে নিয়ে যায়। সংশ্লিষ্ট নেভিগেশন গ্রাফটি নিম্নরূপ প্রদর্শিত হয়:

বৃত্তাকার নেভিগেশন একটি প্রদর্শনী
চিত্র 1. তিনটি গন্তব্য সহ একটি বৃত্তাকার নেভিগেশন গ্রাফ: A, B, এবং C।

প্রতিটি নেভিগেশন অ্যাকশনের সাথে, NavController পিছনের স্ট্যাকে নতুন গন্তব্য যোগ করে। যেমন, ডায়াগ্রামের প্রবাহের মাধ্যমে বারবার নেভিগেট করার ফলে আপনার ব্যাক স্ট্যাকে প্রতিটি গন্তব্যের একাধিক সেট থাকবে: A, B, C, A, B, C, A, B, C।

সমাধান

আপনার ব্যাক স্ট্যাকের পুনরাবৃত্তি এড়াতে, আপনার NavController.navigate() কলে বা আপনার নেভিগেশন অ্যাকশনে popUpTo() এবং inclusive উল্লেখ করুন।

একটি কেস বিবেচনা করুন যেখানে গন্তব্য C-তে পৌঁছানোর পরে, পিছনের স্ট্যাকে প্রতিটি গন্তব্যের একটি উদাহরণ রয়েছে: A, B, C। আপনাকে নিশ্চিত করতে হবে যে আপনি popUpTo() সংজ্ঞায়িত করেছেন এবং ক্রিয়া বা navigate() করার জন্য কল inclusive যা গন্তব্য 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>