Je convertis une application pour utiliser des fragments à l'aide de la bibliothèque de compatibilité. Maintenant, j'ai actuellement un certain nombre d'activités (ABCD) qui s'enchaînent les unes aux autres, D a un bouton `` OK '' qui, lorsque vous appuyez, termine, qui ensuite bouillonne onActivityResult()
pour détruire C et B.
Pour ma version antérieure au fragment Honycomb, chaque activité est en fait une enveloppe sur les fragments Af Bf Cf Df. Toutes les activités sont lancées via startActivityForResult()
et onActivityResult()
dans chacun des fragments peuvent heureusement appelergetActivity().finish()
Le problème que je rencontre est que dans ma version Honeycomb, je n'ai qu'une seule activité, A, et les fragments Bf, Cf, Df sont chargés à l'aide de FragmentManager
.
Ce que je ne comprends pas, c'est quoi faire dans Df lorsque "OK" est pressé afin de supprimer les fragments Df, Cf et Bf?
J'ai essayé de faire sortir le fragment de la pile, mais cela a entraîné une exception. onActivityResult()
est inutile car je n'ai pas chargé le fragment en utilisant startActivityForResult()
.
Suis-je en train de penser à cela complètement de la mauvaise façon? Dois-je implémenter une sorte d'écouteur qui communique avec le fragment parent ou l'activité afin de faire le pop à l'aide du gestionnaire de transactions?
Réponses:
Étape # 1: Demandez à Df de dire à D "yo! Nous avons obtenu le clic OK!" via l'appel d'une méthode, soit sur l'activité elle-même, soit sur une instance d'interface fournie par l'activité.
Étape # 2: Demandez à D de retirer les fragments via
FragmentManager
.L'activité d'hébergement (D) est celle qui sait quels autres fragments se trouvent dans l'activité (vs être dans d'autres activités). Par conséquent, les événements in-fragment qui pourraient affecter le mélange de fragments doivent être propagés à l'activité, ce qui effectuera les mouvements d'orchestration appropriés.
la source
finish()
devrait suffire.onDestroy()
méthode à votre fragment et voyez si elle est appelée.Bien que ce ne soit peut-être pas la meilleure approche, l'équivalent le plus proche auquel je peux penser, cela fonctionne avec la bibliothèque de support / compatibilité.
ou
autrement.
De plus, vous pouvez utiliser le backstack et le faire éclater. Cependant, gardez à l'esprit que le fragment peut ne pas être sur la backstack (en fonction de la transaction de fragment qui l'a amené là-bas ..) ou que ce n'est peut-être pas le dernier qui est entré dans la pile, alors éclater la pile pourrait supprimer le mauvais ...
la source
Vous pouvez utiliser l'approche ci-dessous, cela fonctionne bien:
la source
popBackStack()
est la seule solution qui fonctionne lorsque vous souhaitez remettre le titre de la barre d'actions à l'état précédent après avoir supprimé le fragment. Sinon, je n'aurais pas besoin de combiner les deux solutions les mieux notées de stackoverflow.com/questions/13472258/… et cette solution ici pour toujours définir le titre de la barre d'action appropriée après divers cas d'utilisation. comme appuyer en arrière, supprimer, ajouter, remplacer, etc.Vous devriez laisser l'activité gérer l'ajout et la suppression de fragments, comme le dit CommonsWare, utilisez un écouteur. Voici un exemple:
la source
Dans Activity / AppCompatActivity:
puis appelez le fragment:
ou comme indiqué dans d'autres réponses, appelez cela dans le fragment:
la source
Si vous utilisez le nouveau composant de navigation, est aussi simple que
Il fera tout le FragmentTransaction en arrière pour vous.
la source
Vérifiez si vos besoins sont satisfaits par un DialogFragment. DialogFragment a une méthode remove (). Beaucoup plus propre à mon avis.
la source
Je crée une méthode simple pour ça
Ensuite, placez-le dans ma classe ActivityUtils
C'est un excellent travail, amusez-vous!
la source
OnCreate:
Voici comment je cache le fragment dans l'événement de clic 1
Le montre ensuite de retour dans l'événement 2
la source
Si vous devez revenir du quatrième fragment de l'historique de backstack au premier, utilisez des balises !!!
Lorsque vous ajoutez le premier fragment, vous devez utiliser quelque chose comme ceci:
ou
Et quand vous voulez montrer les fragments B, C et D, vous utilisez ceci:
et d'autres lettres ....
Pour revenir à
Fragment
A, appelez simplementpopBackStack(0, "A")
, oui, utilisez l'indicateur que vous avez spécifié lorsque vous l'ajoutez et notez qu'il doit être le même indicateur dans la commandeaddToBackStack()
, pas celui utilisé dans la commande remplacer ou ajouter.Vous êtes les bienvenus ;)
la source
Pour fermer un fragment à l'intérieur du même fragment
la source
Pourquoi pas seulement:
getActivity (). finish ();
la source