In der Android-Navigation bezieht sich der Begriff Ziel des Dialogfelds auf Ziele. in der Navigationsgrafik der App in Form von Dialogfenstern, App-UI-Elemente und -Inhalte überlagern.
Da Dialogfeldziele über gehosteten Zielen angezeigt werden, die den Parameter
müssen Sie einige wichtige Überlegungen dazu anstellen, wie
Ziele mit dem Back-Stack Ihrer NavController
interagieren.
Dialog zusammensetzbar
Wenn Sie in „Schreiben“ ein Dialogfeld erstellen möchten, fügen Sie der Datei NavHost
ein Ziel hinzu
mit der Funktion dialog()
. Die Funktion verhält sich im Wesentlichen genauso wie
composable
wird nur ein Dialogziel erstellt und kein gehosteter
Ziel.
Betrachten Sie das folgende Beispiel:
@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() }
}
}
- Als Startziel wird die Route
Home
verwendet. Weilcomposable()
fügt es der Grafik hinzu, es handelt sich um ein gehostetes Ziel. - Das andere Ziel verwendet die Route
Settings
.- Da sie von
dialog()
der Grafik hinzugefügt wird, handelt es sich ebenfalls um ein Dialogfeld. Ziel. - Wenn der Nutzer von
HomeScreen
nachSettingsScreen
wechselt, Letztere erscheint überHomeScreen
.
- Da sie von
SettingsScreen
enthält zwar selbst keine zusammensetzbareDialog
-Funktion, da es sich um ein Dialogziel handelt, wird es vomNavHost
innerhalb einesDialog
.
Dialogziele werden in NavHost
über dem vorherigen Ziel angezeigt. Verwenden Sie
wenn das Dialogfeld einen separaten Bildschirm in Ihrer App darstellt, für den ein eigenes
Lebenszyklus und gespeicherter Status unabhängig von anderen Zielen in Ihrem
Navigationsdiagramm. Sie könnten auch ein AlertDialog
oder ähnliches
zusammensetzbar, wenn Sie ein Dialogfeld für einen weniger komplexen Prompt wie eine
bestätigen.
Kotlin-DSL
Wenn Sie mit Fragmenten arbeiten und Kotlin DSL verwenden, um das Hinzufügen eines Dialogziels ähnelt der Schreiben.
Im folgenden Snippet wird außerdem die Funktion dialog()
verwendet, um
Fügen Sie ein Dialogfeldziel hinzu, das ein Fragment verwendet:
// 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
Wenn Sie bereits ein DialogFragment
-Element haben, verwenden Sie das Element <dialog>
, um
Fügen Sie das Dialogfeld Ihrer Navigationsgrafik hinzu, wie im folgenden Beispiel gezeigt:
<?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>