در ناوبری اندروید، اصطلاح مقصد گفتگو به مقاصدی در نمودار ناوبری برنامه اشاره دارد که به شکل پنجرههای محاورهای، عناصر و محتوای رابط کاربری برنامه را پوشش میدهند.
از آنجا که مقاصد گفتگو بر روی مقصدهای میزبانی شده که میزبان ناوبری را پر می کنند ظاهر می شوند، ملاحظات مهمی در رابطه با نحوه تعامل مقاصد گفتگو با پشته پشته 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>،
در ناوبری اندروید، اصطلاح مقصد گفتگو به مقاصدی در نمودار ناوبری برنامه اشاره دارد که به شکل پنجرههای محاورهای، عناصر و محتوای رابط کاربری برنامه را پوشش میدهند.
از آنجا که مقاصد گفتگو بر روی مقصدهای میزبانی شده که میزبان ناوبری را پر می کنند ظاهر می شوند، ملاحظات مهمی در رابطه با نحوه تعامل مقاصد گفتگو با پشته پشته 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>