Junior — Middle
Welche Methoden können verwendet werden, um die Datenübertragung zwischen Bildschirmen bei der Verwendung der Jetpack Compose Navigation zu implementieren?
sobes.tech KI
Antwort von AI
In Jetpack Compose Navigation gibt es mehrere Ansätze, um Daten zwischen Bildschirmen zu übertragen:
- Navigationsargumente
- Beim Deklarieren der Route können Parameter angegeben werden, die an den nächsten Bildschirm übergeben werden.
- Unterstützt primitive Typen und Strings.
- Beispiel für die Übergabe von id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Verwendung eines ViewModel, das auf Ebene des Navigationsgraphen oder der Aktivität lebt.
- Beide Bildschirme greifen auf dasselbe ViewModel-Exemplar zu und können Daten austauschen.
-
Zustand (State Hoisting)
- Übergabe von Zustand durch Parameter von Bildschirmfunktionen.
- Geeignet für kleine Datenmengen und wenn die Bildschirme im selben Komponenten sind.
-
Daten in NavBackStackEntry.savedStateHandle speichern
- Daten können vor der Rückkehr zum vorherigen Bildschirm in savedStateHandle abgelegt werden.
- Ermöglicht das Zurückgeben von Daten.
Beispiel für die Verwendung von savedStateHandle:
// Daten zurücksenden
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Daten im vorherigen Bildschirm abrufen
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Die Wahl der Methode hängt also vom Datentyp und -volumen sowie von der Architektur der Anwendung ab.