با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
یک مثال واضح از جایی که باید به مقصد برگردید، زمانی است که مسیریابی شما دایره ای است. این سند موارد استفاده را تشریح می کند.
سناریو
تصور کنید برنامه شما دارای سه مقصد است: A، B، و C. همچنین دارای اقداماتی است که از A به B، B به C، و C به A منتهی می شود. نمودار ناوبری مربوطه به صورت زیر ظاهر می شود:
شکل 1. یک نمودار ناوبری دایره ای با سه مقصد: A، B و C.
با هر اقدام ناوبری، NavController مقصد جدید را به پشته اضافه می کند. به این ترتیب، پیمایش مکرر در جریان در نمودار باعث میشود که پشته پشتی شما شامل چندین مجموعه از هر مقصد باشد: A، B، C، A، B، C، A، B، C.
راه حل
برای جلوگیری از تکرار در پشته خود، popUpTo() and inclusive در تماس خود با NavController.navigate() یا در اقدام ناوبری خود مشخص کنید.
موردی را در نظر بگیرید که پس از رسیدن به مقصد C، پشته پشتی حاوی یک نمونه از هر مقصد است: A، B، C. باید مطمئن شوید که popUpTo() و inclusive اکشن یا فراخوانی برای navigate() را تعریف کردهاید. کاربر از مقصد C تا مقصد A.
در این حالت، وقتی کاربر از مقصد C به مقصد A برمیگردد، NavController نیز به A ظاهر میشود. این بدان معناست که B و C را از پشته حذف میکند. با inclusive = true ، اولین A را نیز باز می کند و به طور موثر پشته را پاک می کند.
پیاده سازی را بنویسید
در زیر پیاده سازی راه حل برای popUpTo() دایره ای در Compose است:
// When creating your `NavGraph` in your `NavHost`.composable("c"){DestinationC(onNavigateToA={navController.navigate("a"){popUpTo("a"){inclusive=true}}},)}
اجرای نماها
در زیر پیاده سازی راه حل برای popUpTo دایره ای در Views آمده است:
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Circular navigation\n\nA clear example of where you need to pop back to a destination is when your\nnavigation is circular. This document outlines that use case.\n\nScenario\n--------\n\nImagine your app has three destinations: A, B, and C. It also has actions that\nlead from A to B, B to C, and C back to A. The corresponding navigation graph\nappears as follows:\n**Figure 1.** A circular navigation graph with three destinations: A, B, and C.\n\nWith each navigation action, the `NavController` adds the new destination to the\nback stack. As such, repeatedly navigating through the flow in the diagram would\ncause your back stack would to contain multiple sets of each destination: A, B,\nC, A, B, C, A, B, C.\n\nSolution\n--------\n\nTo avoid repetition in your back stack, specify [`popUpTo()`](/guide/navigation/backstack#pop) and\n[`inclusive`](/guide/navigation/backstack#pop-back-destination) in your call to `NavController.navigate()` or in your\nnavigation action.\n\nConsider a case where after reaching destination C, the back stack contains one\ninstance of each destination: A, B, C. You need to ensure that you have defined\n`popUpTo()` and `inclusive` in the action or call to `navigate()` that takes the\nuser from destination C to destination A.\n\nIn this case, when the user navigates from destination C back to destination A,\nthe `NavController` also pops up to A. This means that it removes B and C from\nthe stack. With `inclusive = true`, it also pops the first A, effectively\nclearing the stack.\n| **Note:** This is similar to calling [`popBackStack()` and passing `inclusive`](/guide/navigation/backstack#pop-back-destination).\n\n### Compose implementation\n\nThe following is the implementation of the solution for circular `popUpTo()` in\nCompose: \n\n // When creating your `NavGraph` in your `NavHost`.\n composable(\"c\") {\n DestinationC(\n onNavigateToA = {\n navController.navigate(\"a\") {\n popUpTo(\"a\") {\n inclusive = true\n }\n }\n },\n )\n }\n\n### Views implementation\n\nThe following is the implementation of the solution for circular `popUpTo` in\nViews: \n\n \u003cfragment\n android:id=\"@+id/c\"\n android:name=\"com.example.myapplication.C\"\n android:label=\"fragment_c\"\n tools:layout=\"@layout/fragment_c\"\u003e\n\n \\\u003caction\n android:id=\"@+id/action_c_to_a\"\n app:destination=\"@id/a\"\n app:popUpTo=\"@+id/a\"\n app:popUpToInclusive=\"true\"/\\\u003e\n \u003c/fragment\u003e"]]