İletişim kutusu hedefleri

Android navigasyonunda iletişim hedefi terimi, hedefleri ifade eder uygulamanın gezinme grafiğinde, diyalog pencereleri, Yer paylaşımlı uygulama kullanıcı arayüzü öğeleri ve içerikleri.

İletişim kutusu hedefleri, ana makine iletişim kutusundayken, iletişimin nasıl hedefler, NavController'inizin arka yığınıyla etkileşime girer.

Oluşturulabilir iletişim kutusu

Compose'da iletişim kutusu hedefi oluşturmak için NavHost cihazınıza hedef ekleyin dialog() işlevini kullanarak. Fonksiyon, temel olarak composable, bir barındırılan alan değil, yalnızca bir iletişim kutusu hedefi oluşturur. hedef.

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

@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() }
    }
}
  1. Başlangıç hedefinde Home rotası kullanılır. Çünkü composable() bunu grafiğe ekler ve barındırılan bir hedeftir.
  2. Diğer hedef, Settings rotasını kullanıyor.
    • Benzer şekilde, dialog() bunu grafiğe eklediği için bir iletişim kutusudur seçeceğiz.
    • Kullanıcı HomeScreen konumundan SettingsScreen konumuna gittiğinde ikincisi HomeScreen üzerinde görünür.
  3. SettingsScreen, kendisi bir Dialog composable'ı içermese de, bir iletişim kutusu hedefi olduğundan, NavHost bunu Dialog.

İletişim kutusu hedefleri, NavHost içinde önceki hedefin üzerinde görünür. Tekliflerinizi otomatikleştirmek ve optimize etmek için Söz konusu iletişim kutusu, uygulamanızda kendi yaşam döngüsü ve kayıtlı durumdan bağımsız olarak, gezinme grafiğidir. AlertDialog veya alakalı bir gibi daha az karmaşık bir istem için bir iletişim kutusu istiyorsanız onayı.

Kotlin DSL

Parçalarla çalışıyorsanız ve Kotlin DSL kullanıyorsanız grafiğinizi oluşturun. İletişim kutusu hedefi eklemek, Oluştur'u tıklayın.

Aşağıdaki snippet'te dialog() işlevinin parça kullanan bir iletişim kutusu hedefi ekleyin:

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

Mevcut bir DialogFragment öğeniz varsa <dialog> öğesini kullanarak şu işlemleri yapın: aşağıdaki örnekte gösterildiği gibi gezinme grafiğinize iletişim kutusu ekleyin:

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