Tujuan dialog

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") }) }
    }
}
  1. Tujuan awal adalah composable Home. Karena menggunakan composable(), properti ini adalah tujuan yang dihosting.
  2. Tujuan lainnya adalah composable SettingsDialog. Karena fungsi dialog() menambahkannya ke grafik, fungsi ini adalah tujuan dialog. Saat pengguna menavigasi dari Home ke SettingsDialog, yang terakhir akan muncul di Home.
  3. Meskipun SettingsDialog tidak menyertakan composable Dialog itu sendiri, karena merupakan tujuan dialog, NavHost menampilkannya dalam Dialog.

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>