Dalam navigasi Android, istilah tujuan dialog mengacu pada tujuan dalam grafik navigasi aplikasi yang berbentuk jendela dialog, yang menempatkan elemen dan konten UI aplikasi.
Karena tujuan dialog muncul di atas tujuan yang dihosting dan mengisi
host navigasi, ada beberapa pertimbangan penting terkait cara
tujuan dialog berinteraksi dengan data sebelumnya NavController
.
Composable dialog
Untuk membuat tujuan dialog di Compose, tambahkan tujuan ke NavHost
menggunakan fungsi dialog()
. Fungsi ini pada dasarnya berperilaku sama seperti
composable()
. Fungsi ini hanya membuat tujuan dialog, bukan tujuan
yang dihosting.
Perhatikan contoh berikut:
@Composable
fun SettingsDialog(){
Text("Settings")
// ...
}
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController, startDestination = "home") {
composable("home") { Home(onNavigateToHome = { navController.navigate("home") }) }
dialog("settings") { SettingsDialog(onNavigateToSettingsDialog = { navController.navigate("settings") }) }
}
}
- Tujuan awal adalah composable
Home
. Karena menggunakancomposable()
, properti ini adalah tujuan yang dihosting. - Tujuan lainnya adalah composable
SettingsDialog
. Karena fungsidialog()
menambahkannya ke grafik, fungsi ini adalah tujuan dialog. Saat pengguna menavigasi dariHome
keSettingsDialog
, yang terakhir akan muncul diHome
. - Meskipun
SettingsDialog
tidak menyertakan composableDialog
itu sendiri, karena merupakan tujuan dialog,NavHost
menampilkannya dalamDialog
.
Tujuan dialog muncul di atas tujuan sebelumnya di NavHost
.
Gunakan keduanya saat dialog menampilkan layar terpisah di aplikasi Anda yang
memerlukan siklus prosesnya dan status tersimpannya sendiri, terlepas dari tujuan lain dalam
grafik navigasi Anda. Anda mungkin lebih memilih menggunakan AlertDialog
atau composable
terkait jika menginginkan dialog untuk perintah yang tidak terlalu kompleks, seperti
konfirmasi.
DSL Kotlin
Jika Anda menangani fragmen dan menggunakan DSL Kotlin untuk membuat grafik, penambahan tujuan dialog sangat mirip dengan saat menggunakan Compose.
Pertimbangkan bagaimana fungsi dialog()
dalam cuplikan berikut juga digunakan untuk
menambahkan tujuan dialog yang menggunakan fragmen:
// Add the graph to the NavController with `createGraph()`.
navController.graph = navController.createGraph(
startDestination = "home"
) {
// Associate the "home" destination with the HomeFragment.
fragment<HomeFragment>("home") {
label = "Home"
}
// Define the "settings" destination as a dialog using DialogFragment.
dialog<SettingsDialogFragment>("settings") {
label = "Settings Dialog"
}
}
XML
Jika Anda sudah memiliki DialogFragment
, gunakan elemen <dialog>
untuk menambahkan dialog ke grafik navigasi, seperti yang ditunjukkan pada contoh
berikut:
<?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>