Junior — Middle
როგორ შეიძლება მონაცემების გადაცემა განხორციელდეს ეკრანებს შორის Jetpack Compose Navigation-ის გამოყენებისას?
sobes.tech AI
პასუხი AI-სგან
Jetpack Compose Navigation-ში მონაცემების გადაცემისთვის რამდენიმე მიდგომაა:
- ნავიგაციის არგუმენტები
- როდესაც გამოაცხადებთ მარშრუტს, შეგიძლიათ მიუთითოთ პარამეტრები, რომლებიც გადაეცემა შემდეგ ეკრანს.
- მხარდაჭერილია პრიმიტიული ტიპები და სტრიქონები.
- მაგალითი id-ის გადაცემაზე:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- გამოყენება ViewModel-ის, რომელიც ცხოვრობს ნავიგაციის გრაფის ან აქტივობის დონეზე.
- ორივე ეკრანი აქვს წვდომა ერთსა და იმავე ViewModel-ის მაგალითზე და მათ შორის მონაცემების გაცვლა შეუძლია.
-
სტატუსი (State Hoisting)
- სტატუსის გადაცემა ეკრანის ფუნქციების პარამეტრებით.
- შესაფერისია მცირე მონაცემებისთვის და როდესაც ეკრანები ერთ კომპონენტშია.
-
მონაცემების შენახვა NavBackStackEntry.savedStateHandle-ში
- მონაცემების შენახვა შესაძლებელია savedStateHandle-ში წინა ეკრანზე დაბრუნებამდე.
- ეს საშუალებას აძლევს მონაცემების უკან დაბრუნებას.
მაგალითი savedStateHandle-ის გამოყენების:
// მონაცემების უკან დაბრუნება
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// მონაცემების მიღება წინამორბედ ეკრანზე
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
ამიტომ, მეთოდის არჩევანი დამოკიდებულია მონაცემების ტიპსა და მოცულობაზე, ასევე აპლიკაციის არქიტექტურაზე.