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

  1. 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)
}
  1. 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.
  2. Á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.
  3. 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.