W nawigacji po Androidzie termin miejsce docelowe okna dialogowego odnosi się do miejsc docelowych. na wykresie nawigacyjnym aplikacji, które mają postać okien dialogowych, nakładających się na elementy interfejsu i zawartość aplikacji.
Ponieważ miejsca docelowe w oknach są wyświetlane w hostowanych miejscach docelowych, które wypełniają pole
na hoście nawigacji, należy pamiętać o kilku ważnych kwestiach dotyczących
miejsca docelowe wchodzą w interakcję ze stosem wstecznym Twojego NavController
.
Okno z możliwością tworzenia
Aby utworzyć miejsce docelowe w oknie Compose, dodaj miejsce docelowe w NavHost
za pomocą funkcji dialog()
. Funkcja działa zasadniczo tak samo jak
composable
, tylko tworzy miejsce docelowe okna, a nie hostowane
miejsce docelowe.
Przyjrzyjmy się temu przykładowi:
@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() }
}
}
- Początkowe miejsce docelowe wykorzystuje trasę
Home
. Ponieważcomposable()
dodaje go do wykresu. Jest to hostowane miejsce docelowe. - Drugie miejsce docelowe używa trasy
Settings
.- Analogicznie
dialog()
dodaje go do wykresu, więc jest to okno dialogowe miejsce docelowe. - Gdy użytkownik przejdzie z
HomeScreen
doSettingsScreen
, druga pojawia się nadHomeScreen
.
- Analogicznie
- Chociaż
SettingsScreen
nie zawiera samej funkcji kompozycyjnejDialog
, ponieważ jest to miejsce docelowe okna,NavHost
wyświetla je wDialog
Miejsca docelowe w oknach są wyświetlane nad poprzednim miejscem docelowym w komponencie NavHost
. Używaj
gdy okno dialogowe to oddzielny ekran aplikacji, który musi mieć własny
cyklu życia i zapisanym stanie, niezależnie od innych
wykres nawigacyjny. Możesz użyć AlertDialog
lub powiązanych
kompozycyjne, jeśli potrzebujesz okna z mniej złożonym promptem, takim jak
z potwierdzeniem.
Kotlin DSL
Jeśli pracujesz z fragmentami i korzystasz z kanału DSL Kotlin, utworzenie wykresu. Dodawanie miejsca docelowego okna dialogowego jest bardzo podobne do Utwórz.
Zastanów się, jak ten fragment kodu wykorzystuje też funkcję dialog()
do
dodaj miejsce docelowe w oknie, które korzysta z fragmentu:
// 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
Jeśli masz już obiekt DialogFragment
, użyj elementu <dialog>
, aby
dodaj okno do wykresu nawigacyjnego, jak w poniższym przykładzie:
<?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>