50 votes

Comment pop pile de retour d'Activité avec de multiples Fragments?

Activity layout picture

Supposons que j'ai une Activité qui contient deux FrameLayouts (appelons-les FrameA et FrameB) qui, à son tour , chaque contenir un Fragment (appelons-les FragmentA1 et FragmentB1 respectivement). Maintenant, j'ai commis une série d'fragment de transactions à l'aide de code semblable au suivant...

getFragmentManager()
 .beginTransaction()
 .replace(frameId, fragment)
 .addToBackStack(null)
 .commit();

... tel que je le remplacer FragmentA1 dans FrameA avec FragmentA2, puis-je remplacer FragmentB1 dans FrameB avec FragmentB2, puis-je remplacer FragmentA2 dans FrameA avec FragmentA3, puis-je remplacer FragmentB2 dans Image2 avec FragmentB3, et l'état final ressemble à l'image ci-dessus (où seulement FragmentA3 et FragmentB3 sont visibles).

Si j'ai bien compris comment la pile de retour des œuvres, en appuyant sur "retour" sera interleave éclatement de l'Fragments entre FrameA et FrameB (reflétant la façon dont j'ai ajouté de la mer).

Personne ne sait si il est possible de pop de la dernière transaction sur FrameA ou FrameB de manière sélective? (c'est à dire si j'ai appuyé sur "Pop FrameA" puis FrameA serait la transition de retour de FragmentA3 à FragmentA2 et, au lieu de cela, si j'ai appuyé sur "Pop FrameB" puis FrameB serait la transition de retour de FragmentB3 à FragmentB2)

Complément: je sais que je peux obtenir le Fragment dernier ajout à un FrameLayout à l'aide de l' FragmentManager.findFragmentById(int framelayoutId) méthode, mais en l'appelant FragmentTransaction.remove(fragment).commit() seulement élimine le Fragment de la Vue et de ne pas la transition de la Vue arrière du Fragment qu'il a précédemment affiché.

26voto

hackbod Points 55292

En gros, non, il y a une seule pile de retour pour une activité.

Vous aurez juste besoin de mettre en place votre propre arrière des piles.

Comme d'Android 4.0 (et le support associé de la bibliothèque) il y a des Api qui devrait faire de ce relativement facile - FragmentTransaction.détacher(Fragment) vous permet de placer un fragment dans le même état, c'est quand dans la pile de retour, et FragmentManager.saveFragmentInstanceState(Fragment) vous permet d'aller plus loin et complètement jeter le Fragment d'objet. N'est pas un hasard, ils sont utilisés pour mettre en œuvre ViewPager de FragmentPagerAdapter et FragmentStatePagerAdapter, respectivement, de sorte que vous pourrait regarder le code pour elles un exemple de la façon de les utiliser.

15voto

YaLi Points 41

FragmentManager.popBackStack(String nom, FragmentManager.POP_BACK_STACK_INCLUSIVE)

Ici est la réponse la plus simple, et l'explication est très claire : est-ce le bon moyen-de-nettoyage-fragment-arrière-pile-quand-laisser-un-profondément-nid

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