J'ai actuellement un fragment dans une superposition. Ceci est pour vous connecter au service. Dans l'application pour téléphone, chacune des étapes que je souhaite afficher dans la superposition correspond à ses propres écrans et activités. Il y a 3 parties du processus de connexion et chacune avait sa propre activité qui a été appelée avec startActivityForResult ().
Maintenant, je veux faire la même chose en utilisant des fragments et une superposition. La superposition affichera un fragment correspondant à chaque activité. Le problème est que ces fragments sont hébergés dans une activité de l'API Honeycomb. Je peux faire fonctionner le premier fragment, mais je dois ensuite startActivityForResult (), ce qui n'est pas possible. Y a-t-il quelque chose du genre startFragmentForResult () où je peux lancer un nouveau fragment et quand c'est fait, il renvoie un résultat au fragment précédent?
la source
onActivityResult
méthode du fragment parent si vous le souhaitez.Si vous le souhaitez, il existe des méthodes de communication entre Fragments,
Vous pouvez les rappeler en utilisant ces derniers.
la source
setTargetFragment()
.Nous pouvons simplement partager le même ViewModel entre les fragments
SharedViewModel
FirstFragment
SecondFragment
la source
Mes 2 cents.
Je passe entre les fragments en échangeant un ancien fragment avec un nouveau en utilisant masquer et afficher / ajouter (existant / nouveau). Donc, cette réponse est pour les développeurs qui utilisent des fragments comme moi.
Ensuite, j'utilise la
onHiddenChanged
méthode pour savoir que l'ancien fragment a été remplacé par le nouveau. Voir le code ci-dessous.Avant de quitter le nouveau fragment, j'ai défini un résultat dans un paramètre global à interroger par l'ancien fragment. C'est une solution très naïve.
la source
getAndReset()
méthode?onResume()
appelé sur le premier fragment lorsque le second est écarté?Récemment, Google vient d'ajouter une nouvelle capacité
FragmentManager
quiFragmentManager
lui permet de servir de magasin central pour les résultats de fragments. Nous pouvons facilement passer les données entre les fragments.Fragment de départ.
Un fragment dont nous voulons le résultat.
L'extrait est tiré des documents officiels de Google. https://developer.android.com/training/basics/fragments/pass-data-between#kotlin
Aux données de cette réponse écrites, cette fonctionnalité est toujours en
alpha
état. Vous pouvez l'essayer en utilisant cette dépendance.la source
Dans votre fragment, vous pouvez appeler getActivity (). Cela vous donnera accès à l'activité qui a créé le fragment. À partir de là, vous pouvez appeler votre méthode de personnalisation pour définir les valeurs ou pour transmettre les valeurs.
la source
Il existe une bibliothèque Android - FlowR qui vous permet de démarrer des fragments pour obtenir des résultats.
Commencer un fragment pour le résultat.
La gestion entraîne le fragment appelant.
Définition du résultat dans le Fragment.
la source
Une solution utilisant des interfaces (et Kotlin). L'idée de base est de définir une interface de callback, de l'implémenter dans votre activité, puis de l'appeler depuis votre fragment.
Tout d'abord, créez une interface
ActionHandler
:Ensuite, appelez ceci depuis votre enfant (dans ce cas, votre fragment):
Enfin, implémentez ceci dans votre parent pour recevoir le rappel (dans ce cas, votre activité):
la source
Le moyen le plus simple de renvoyer des données est d'utiliser setArgument (). Par exemple, vous avez fragment1 qui appelle fragment2 qui appelle fragment3, fragment1 -> framgnet2 -> fargment3
Dans fragment1
Dans fragment2, nous appelons fragment3 comme d'habitude
Lorsque nous avons terminé notre tâche dans fragment3, nous appelons maintenant comme ceci:
Maintenant, dans fragment2, nous pouvons facilement appeler des arguments
la source
Une autre chose que vous pouvez faire en fonction de votre architecture est d'utiliser un ViewModel partagé entre les fragments. Donc, dans mon cas, FragmentA est un formulaire et FragmentB est une vue de sélection d'éléments dans laquelle l'utilisateur peut rechercher et sélectionner un élément, en le stockant dans le ViewModel. Puis quand je reviens sur FragmentA, les informations sont déjà stockées!
la source