در ناوبری اندروید، اصطلاح مقصد گفتگو به مقاصدی در نمودار ناوبری برنامه اشاره دارد که به شکل پنجرههای محاورهای، عناصر و محتوای رابط کاربری برنامه را پوشش میدهند.
از آنجا که مقاصد گفتگو بر روی مقصدهای میزبانی شده که میزبان ناوبری را پر می کنند ظاهر می شوند، ملاحظات مهمی در رابطه با نحوه تعامل مقاصد گفتگو با پشته پشته NavController شما وجود دارد.
دیالوگ قابل تنظیم
برای ایجاد یک مقصد گفتگو در Compose، با استفاده از تابع dialog() یک مقصد را به NavHost خود اضافه کنید. تابع اساساً مانند composable عمل می کند ، فقط یک مقصد گفتگو را به جای یک مقصد میزبان ایجاد می کند.
به مثال زیر توجه کنید:
@Serializable
object Home
@Serializable
object Settings
@Composable
fun HomeScreen(onNavigateToSettings: () -> Unit){
Column {
Text("Home")
Button(onClick = onNavigateToSettings){
Text("Open settings")
}
}
}
// This screen will be displayed as a dialog
@Composable
fun SettingsScreen(){
Text("Settings")
// ...
}
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController, startDestination = Home) {
composable<Home> { HomeScreen(onNavigateToSettings = { navController.navigate(route = Settings) }) }
dialog<Settings> { SettingsScreen() }
}
}
- مقصد شروع از مسیر
Homeاستفاده می کند. از آنجا کهcomposable()آن را به گراف اضافه می کند، یک مقصد میزبانی شده است. - مقصد دیگر از مسیر
Settingsاستفاده می کند.- به طور مشابه، چون
dialog()آن را به نمودار اضافه می کند، یک مقصد گفتگو است. - هنگامی که کاربر از
HomeScreenبهSettingsScreenهدایت می شود، صفحه دوم رویHomeScreenظاهر می شود.
- به طور مشابه، چون
- اگرچه
SettingsScreenخود شامل یکDialogقابل تنظیم نیست، زیرا یک مقصد گفتگو است،NavHostآن را در یکDialogنمایش می دهد.
مقصدهای گفتگو بر روی مقصد قبلی در NavHost ظاهر می شوند. زمانی از آنها استفاده کنید که کادر گفتگو نمایانگر یک صفحه جداگانه در برنامه شما باشد که به چرخه حیات و وضعیت ذخیره شده خود نیاز دارد، مستقل از هر مقصد دیگری در نمودار ناوبری شما. اگر میخواهید یک گفتگو برای اعلان کمتر پیچیدهتر، مانند تأیید، استفاده کنید، ممکن است ترجیح دهید از یک AlertDialog یا composable مرتبط استفاده کنید.
Kotlin DSL
اگر با قطعات کار می کنید و از Kotlin DSL برای ایجاد نمودار خود استفاده می کنید، افزودن یک مقصد گفتگو بسیار شبیه به هنگام استفاده از Compose است.
در نظر بگیرید که چگونه در قطعه زیر از تابع dialog() برای افزودن یک مقصد گفتگو که از یک قطعه استفاده می کند استفاده می کند:
// Define destinations with serializable classes or objects
@Serializable
object Home
@Serializable
object Settings
// Add the graph to the NavController with `createGraph()`.
navController.graph = navController.createGraph(
startDestination = Home
) {
// Associate the home route with the HomeFragment.
fragment<HomeFragment, Home> {
label = "Home"
}
// Define the settings destination as a dialog using DialogFragment.
dialog<SettingsFragment, Settings> {
label = "Settings"
}
}
XML
اگر یک DialogFragment موجود دارید، از عنصر <dialog> برای افزودن گفتگو به نمودار پیمایش خود استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_graph"> ... <dialog android:id="@+id/my_dialog_fragment" android:name="androidx.navigation.myapp.MyDialogFragment"> <argument android:name="myarg" android:defaultValue="@null" /> <action android:id="@+id/myaction" app:destination="@+id/another_destination"/> </dialog> ... </navigation>