Junior — Middle
Kokiais metodais galima įgyvendinti duomenų perdavimą tarp ekranų naudojant Jetpack Compose Navigation?
sobes.tech AI
Atsakymas iš AI
Jetpack Compose Navigation yra keletas būdų perduoti duomenis tarp ekranų:
- Navigacijos argumentai
- Apibrėžus maršrutą, galite nurodyti parametrus, kurie bus perduoti į kitą ekraną.
- Palaikomi prigimtiniai tipai ir eilutės.
- Pavyzdys, kaip perduoti id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Naudojamas ViewModel, kuris gyvena navigacijos grafiko arba veiklos lygyje.
- Abu ekranai turi prieigą prie to paties ViewModel ir gali keistis duomenimis per jį.
-
Būsena (State Hoisting)
- Būsena perduodama per funkcijų parametrus.
- Tinka mažiems duomenims ir kai ekranai yra tame pačiame komponento.
-
Duomenų išsaugojimas NavBackStackEntry.savedStateHandle
- Duomenis galima įdėti į savedStateHandle prieš grįžtant į ankstesnį ekraną.
- Leidžia grąžinti duomenis atgal.
Pavyzdys, kaip naudoti savedStateHandle:
// Duomenų grąžinimas
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Duomenų gavimas ankstesniame ekrane
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Taigi, metodo pasirinkimas priklauso nuo duomenų tipo ir kiekio, taip pat nuo programos architektūros.