Junior — Middle
Jakými metodami lze realizovat přenos dat mezi obrazovkami při použití navigace Jetpack Compose?
sobes.tech AI
Odpověď od AI
V Jetpack Compose Navigation existuje několik přístupů k přenosu dat mezi obrazovkami:
- Argumenty navigace
- Při deklaraci trasy můžete specifikovat parametry, které budou předány na další obrazovku.
- Podporovány jsou primitivní typy a řetězce.
- Příklad předání id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Použití ViewModel, která žije na úrovni navigačního grafu nebo aktivity.
- Oba obrazovky mají přístup ke stejnému instanci ViewModelu a mohou si vyměňovat data přes ni.
-
Stav (State Hoisting)
- Přenos stavu přes parametry funkcí obrazovek.
- Vhodné pro malé údaje a když jsou obrazovky ve stejném komponentu.
-
Uložení dat v NavBackStackEntry.savedStateHandle
- Data lze uložit do savedStateHandle před návratem na předchozí obrazovku.
- Umožňuje vrácení dat zpět.
Příklad použití savedStateHandle:
// Odeslání dat zpět
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Získání dat v předchozí obrazovce
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Volba metody závisí na typu a objemu dat, stejně jako na architektuře aplikace.