Comment remplacer le fragment C avec fragment A quand le retour du bouton est pressé?
Mon scénario : Activité 1 se compose de Fragments de Un-> B-> C. Tous les fragments sont ajoutés à l'aide de ce code :
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.content, fragment, TAG);
ft.addToBackStack(TAG);
ft.commit();
Maintenant, à partir du fragment C, je veux retourner directement à l'Fragment de A. par conséquent, j'ai commenté ft.addToBackStack(TAG)
lors de l'ajout du Fragment C. Donc, quand je presse le bouton de retour à partir de C-je obtenir directement Un Fragment sur l'écran.
Cependant, le Fragment C n'est pas remplacé par A. En fait, les deux fragments sont visibles. Comment puis-je résoudre ce problème?
- pop deux fois? peut être
Vous devez vous connecter pour publier un commentaire.
Théorie
Utiliser le
addToBackStack(tag:String):FragmentTransaction
méthode à partir de laFragmentTransaction
afin de marquer un point où vous voulez retourner. Cette méthode renvoie leFragmentTransaction
exemple pour la chaîne de capacité seulement.Puis Retour avec le
popBackStackImmediate(tag:String,drapeau:int):void
méthode de laFragmentManager
. La balise est ce que vous avez spécifié avant. Le drapeau est soit la constantePOP_BACK_STACK_INCLUSIVE
pour inclure la transaction marquée ou0
.Exemple
Ce qui suit est un exemple avec la mise en page suivante ayant un
FrameLayout
avec l'idcontent_frame
lorsque les fragments sont chargés dans.Le code ci-dessous marque un fragment par fragment nom de la classe lors du remplacement du contenu de l'élément de mise en page avec l'id
content_frame
.Et pour compléter cet exemple une méthode qui vous permet de revenir à exactement la même fragment à l'aide de l'étiquette quand vous avez chargé.
Lors de la mise en œuvre de ce pour de vrai, vous pourriez vouloir ajouter un null vérifier sur le fragment paramètre ;-).
Que vous devez faire 2 choses - nom de la FragmentTransaction de Un->B, puis remplacer onBackPressed() dans votre contenant de l'activité pour appeler FragmentManager#popBackStack (String nom, int flags) lorsque vous êtes sur le Fragment C. Exemple:
Transition de l'Un->B
Transition de B->C, utiliser une opération similaire avec "FragmentC" comme son étiquette.
Puis dans votre contenant de l'Activité de remplacer onBackPressed():
.replace(new FragmentB(), "FragmentB")
Je ne le pense pas.replace(new FragmentB(), "FragmentB")
devrait être.replace(R.id.container, new FragmentB(), "FragmentB")