Junior — Middle
Ποια μέθοδοι μπορούν να χρησιμοποιηθούν για την υλοποίηση της μεταφοράς δεδομένων μεταξύ οθονών κατά τη χρήση της πλοήγησης Jetpack Compose;
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")
Επομένως, η επιλογή της μεθόδου εξαρτάται από τον τύπο και τον όγκο των δεδομένων, καθώς και από την αρχιτεκτονική της εφαρμογής.