Junior — Middle
Akými metódami je možné realizovať prenos dát medzi obrazovkami pri použití navigácie Jetpack Compose?
sobes.tech AI
Odpoveď od AI
V Jetpack Compose Navigation existuje niekoľko prístupov k prenášaniu údajov medzi obrazovkami:
- Argumenty navigácie
- Pri deklarovaní trasy môžete špecifikovať parametre, ktoré budú odovzdané na nasledujúcu obrazovku.
- Podporované sú primitívne typy a reťazce.
- Príklad odovzdania id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Použitie ViewModel, ktorá žije na úrovni navigačného grafu alebo aktivity.
- Oba obrazovky majú prístup k tej istej inštancii ViewModel a môžu si vymieňať údaje cez ňu.
-
Stav (State Hoisting)
- Prenos stavu cez parametre funkcií obrazoviek.
- Vhodné pre malé údaje a keď sú obrazovky v rovnakom komponentu.
-
Uloženie údajov v NavBackStackEntry.savedStateHandle
- Dáta je možné uložiť do savedStateHandle pred návratom na predchádzajúci obrazovku.
- Umožňuje spätné odoslanie údajov.
Príklad použitia savedStateHandle:
// Odoslanie údajov späť
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Získanie údajov v predchádzajúcej obrazovke
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Výber metódy závisí od typu a objemu údajov, ako aj od architektúry aplikácie.