İletişim kutusu hedefleri

Android navigasyonda iletişim kutusu hedefi terimi, uygulamanın gezinme grafiğinde iletişim pencereleri, yer paylaşımlı uygulama kullanıcı arayüzü öğeleri ve içeriği şeklinde yer alan hedefleri ifade eder.

İletişim kutusu hedefleri, gezinme ana makinesini dolduran barındırılan hedefler üzerinde göründüğünden, iletişim kutusu hedeflerinin NavController'inizin arka yığınıyla nasıl etkileşimde bulunduğuyla ilgili bazı önemli noktalar vardır.

Oluşturulabilir iletişim kutusu

Oluşturma aracında iletişim kutusu hedefi oluşturmak için dialog() işlevini kullanarak NavHost öğenize hedef ekleyin. İşlev temelde composable() ile aynı şekilde davranır, yalnızca barındırılan hedef yerine bir iletişim kutusu hedefi oluşturur.

Aşağıdaki örneği inceleyin:

@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. Başlangıç hedefi Home oluşturulabilir. composable() kullandığı için barındırılan bir hedeftir.
  2. Diğer hedef, SettingsDialog oluşturulabilir. dialog() işlevi bunu grafiğe eklediği için bir iletişim kutusu hedefidir. Kullanıcı Home konumundan SettingsDialog konumuna gittiğinde bu ikinci konum Home üzerinde görünür.
  3. SettingsDialog bir iletişim kutusu hedefi olduğundan Dialog composable öğesinin kendisini içermese de NavHost bunu bir Dialog içinde gösterir.

İletişim kutusu hedefleri, NavHost içinde önceki hedefin üzerinde görünür. İletişim kutusu, uygulamanızda gezinme grafiğinizdeki diğer tüm hedeflerden bağımsız olarak kendi yaşam döngüsüne ve kayıtlı durumuna sahip olması gereken ayrı bir ekranı temsil ediyorsa bunları kullanın. Onay gibi daha basit bir istem için iletişim kutusu istiyorsanız AlertDialog veya alakalı bir metin kullanmayı tercih edebilirsiniz.

Kotlin DSL

Parçalarla çalışıyor ve grafiğinizi oluşturmak için Kotlin DSL'yi kullanıyorsanız iletişim kutusu hedefi eklemek, Oluşturma'yı kullanmaya çok benzer.

Aşağıdaki snippet'te, parça kullanan bir iletişim kutusu hedefi eklemek için dialog() işlevini de nasıl kullandığını düşünün:

// 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

Mevcut bir DialogFragment öğeniz varsa aşağıdaki örnekte gösterildiği gibi iletişim kutusunu gezinme grafiğinize eklemek için <dialog> öğesini kullanın:

<?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>