J'ai commencé à utiliser Android Composants d'architecture (navigation et Safe Args, View Models) avec la bibliothèque Koin.
Actuellement, j'ai un problème avec le passage d'arguments entre deux fragments - je dois passer une valeur de chaîne du fragment A au fragment B, modifier cette valeur dans le fragment B et la renvoyer au fragment A.
J'ai trouvé une solution possible à mon problème - les modèles de vue partagée. Malheureusement, cette approche a un problème car je peux passer et modifier des valeurs entre les écrans, mais lorsque le fragment A navigue vers une autre destination, la valeur dans le modèle de vue partagée est toujours stockée et non effacée.
Existe-t-il une solution différente pour passer et modifier des données entre les fragments dans Android Navigation? Je veux éviter d'effacer cette seule valeur à la main (lorsque le fragment A est détruit).
Android vient de publier une solution pour cela; Passage de données entre destinations ( Navigation 2.3.0-alpha02 ), fondamentalement, dans le fragment A, vous observez les changements dans une variable et dans le fragment B, vous modifiez cette valeur avant d'exécuter popBackStack()
.
Fragment A:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val navController = findNavController();
// We use a String here, but any type that can be put in a Bundle is supported
navController.currentBackStackEntry?.savedStateHandle?.getLiveData("key")?.observe(
viewLifecycleOwner) { result ->
// Do something with the result.
}
}
Fragment B:
navController.previousBackStackEntry?.savedStateHandle?.set("key", result)
navController.popBackStack()