107 votes

Est-il une méthode qui fonctionne comme le début de fragment pour le résultat?

J'ai actuellement un fragment dans une superposition. C'est pour vous connecter au service. Dans l'application téléphone, chacune des étapes que je veux montrer dans le revêtement, ce sont leurs propres écrans et des activités. Il y a 3 parties du processus de connexion et de chacune avait sa propre activité qui a été appelé avec startActivityForResult().

Maintenant, je veux faire la même chose à l'aide de fragments et d'une superposition. La superposition va montrer un fragment correspondant à chaque activité. Le problème est que ces fragments sont hébergés dans une activité dans le Nid d'abeille de l'API. Je peux obtenir le premier fragment de travail, mais j'ai besoin de startActivityForResult(), ce qui n'est pas possible. Est-il quelque chose le long des lignes de startFragmentForResult() où je peux le coup d'envoi d'un nouveau fragment, et quand c'est fait avoir pour elle de retourner un résultat pour le fragment précédent?

62voto

LeffelMania Points 5484

Tous les Fragments de vivre à l'intérieur des Activités. De départ d'un Fragment pour un résultat n'a pas beaucoup de sens, parce que l'Activité qui l'abrite a toujours accès, et vice versa. Si le Fragment doit passer sur un résultat, il peut accéder à ses Activités et de son résultat et de le finir. Dans le cas de l'échange de Fragments d'une seule Activité, bien que l'Activité est toujours accessible en deux Fragments, et tous vos message passing pouvez simplement aller à travers l'Activité.

Rappelez-vous juste que vous avez toujours la communication entre un Fragment et son Activité. De départ et de finition avec un résultat est que le mécanisme de communication entre les Activités - Les Activités peuvent ensuite déléguer toutes les informations nécessaires à leurs Fragments.

60voto

nagoya0 Points 808

Si vous le souhaitez, il existe quelques méthodes pour la communication entre les Fragments,

setTargetFragment(Fragment fragment, int requestCode)
getTargetFragment()
getTargetRequestCode()

Vous pouvez rappel à l'aide de ces.

Fragment invoker = getTargetFragment();
if(invoker != null) {
    invoker.callPublicMethod();
}

5voto

Mes 2 cents.

Je switch entre les fragments en échangeant un vieux fragment avec un nouveau à l'aide de masquer et d'afficher/ajouter (nouvelles ou existantes). Si cette réponse est pour les développeurs qui utilisent des fragments comme je le fais.

Puis-je utiliser l' onHiddenChanged méthode pour savoir que le vieux fragment s'est passé à l'arrière de la nouvelle. Voir le code ci-dessous.

Avant de quitter le nouveau fragment, j'ai mis à la suite dans un paramètre global pour être interrogé par le vieux fragment. C'est une très naïve solution.

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden) return;
    Result result = Result.getAndReset();
    if (result == Result.Refresh) {
        refresh();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X