Junior — Middle
Koje metode mogu biti korišćene za implementaciju prenosa podataka između ekrana pri korišćenju Jetpack Compose Navigation?
sobes.tech АИ
Одговор од АИ
U Jetpack Compose Navigation postoji nekoliko pristupa za prenos podataka između ekrana:
- Argumenti navigacije
- Prilikom deklarisanja rute, možete navesti parametre koji će biti prosleđeni sledećem ekranu.
- Podržani su primitivni tipovi i stringovi.
- Primer prenosa id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Korišćenje ViewModel-a koji živi na nivou navigacionog grafa ili aktivnosti.
- Oba ekrana imaju pristup istom ViewModel instanci i mogu razmenjivati podatke putem nje.
-
Stanje (State Hoisting)
- Prenos stanja putem parametara funkcija ekrana.
- Pogodno za male podatke i kada su ekrani u istom komponentu.
-
Čuvanje podataka u NavBackStackEntry.savedStateHandle
- Podaci se mogu staviti u savedStateHandle pre povratka na prethodni ekran.
- Omogućava vraćanje podataka.
Primer korišćenja savedStateHandle:
// Slanje podataka nazad
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Dobijanje podataka u prethodnom ekranu
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Dakle, izbor metode zavisi od tipa i obima podataka, kao i od arhitekture aplikacije.