Sobes.tech
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ų:

  1. 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)
}
  1. 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į.
  2. Būsena (State Hoisting)

    • Būsena perduodama per funkcijų parametrus.
    • Tinka mažiems duomenims ir kai ekranai yra tame pačiame komponento.
  3. 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.