Junior — Middle
Milyen módszerekkel valósítható meg az adatok átadása a képernyők között a Jetpack Compose navigáció használata során?
sobes.tech MI
Válasz az MI-től
A Jetpack Compose Navigation-ban több megközelítés is létezik az adatok közötti átadásra a képernyők között:
- Navigációs argumentumok
- Az útvonal deklarálásakor megadhatja azokat a paramétereket, amelyeket a következő képernyőre továbbítanak.
- Támogatott primitív típusok és szövegek.
- Példa az id átadására:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Egy ViewModel használata, amely a navigációs gráf vagy az aktivitás szintjén él.
- Mindkét képernyő hozzáfér ugyanahhoz a ViewModel példányhoz, és adatokat cserélhetnek rajta keresztül.
-
Állapot (State Hoisting)
- Állapot átadása a képernyő függvényeinek paramétereivel.
- Kisebb adatokhoz és amikor a képernyők ugyanabban a komponensben vannak, alkalmas.
-
Adatok mentése a NavBackStackEntry.savedStateHandle-ben
- Adatok helyezhetők el a savedStateHandle-ben, mielőtt visszatérne az előző képernyőre.
- Lehetővé teszi az adatok visszaküldését.
A savedStateHandle használatának példája:
// Adatok visszaküldése
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Adatok fogadása az előző képernyőn
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Így a módszer kiválasztása az adatok típusától és mennyiségétől, valamint az alkalmazás architektúrájától függ.