Sobes.tech
Junior — Middle

Akými metódami je možné realizovať prenos dát medzi obrazovkami pri použití navigácie Jetpack Compose?

sobes.tech AI

Odpoveď od AI

V Jetpack Compose Navigation existuje niekoľko prístupov k prenášaniu údajov medzi obrazovkami:

  1. Argumenty navigácie
    • Pri deklarovaní trasy môžete špecifikovať parametre, ktoré budú odovzdané na nasledujúcu obrazovku.
    • Podporované sú primitívne typy a reťazce.
    • Príklad odovzdania id:
navController.navigate("detail_screen/$itemId")

composable("detail_screen/{itemId}") { backStackEntry ->
    val itemId = backStackEntry.arguments?.getString("itemId")
    DetailScreen(itemId)
}
  1. Shared ViewModel

    • Použitie ViewModel, ktorá žije na úrovni navigačného grafu alebo aktivity.
    • Oba obrazovky majú prístup k tej istej inštancii ViewModel a môžu si vymieňať údaje cez ňu.
  2. Stav (State Hoisting)

    • Prenos stavu cez parametre funkcií obrazoviek.
    • Vhodné pre malé údaje a keď sú obrazovky v rovnakom komponentu.
  3. Uloženie údajov v NavBackStackEntry.savedStateHandle

    • Dáta je možné uložiť do savedStateHandle pred návratom na predchádzajúci obrazovku.
    • Umožňuje spätné odoslanie údajov.

Príklad použitia savedStateHandle:

// Odoslanie údajov späť
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)

// Získanie údajov v predchádzajúcej obrazovke
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")

Výber metódy závisí od typu a objemu údajov, ako aj od architektúry aplikácie.