2016-12-13 1 views
0

J'ai un Activity qui crée un Fragment puis ce Fragment crée une autre Fragment:Suppression d'un fragment d'un fragment

Activité -> Fragment1 -> Fragment2

Je suis maintenant dans Fragment2 et je J'aimerais revenir à Fragment1 en cliquant sur un bouton.

Dans mon OnClickListener de mon button J'ai:

getActivity().getSupportFragmentManager().beginTransaction().remove(fragment2.this).commit(); 

Cela me amène à la Activity. Est-il vraiment un moyen de simplement supprimer Fragment2 et aller à Fragment1?

Merci d'avance pour votre temps, je ne pouvais trouver aucune information appropriée en ligne!

+0

Vous pouvez utiliser getSupportFragmentManager(). PopBackStack() au lieu d'enlever le fragment –

+0

En utilisant 'getSupportFragmentManager(). PopBackStack()' j'obtenir le même résultat, retour à l'activité – LDG

+0

J'utilise 'remplacer()', par en utilisant 'add()' serais-je capable de pop? – LDG

Répondre

3

@AhmedAbidi a un bon aperçu de votre problème et oui, la mise en œuvre popBackStack correctement peut résoudre votre problème. Mais de toute façon, je voudrais suggérer une approche différente pour gérer ce type de situations. Ecrivez deux fonctions publiques dans votre Activity pour passer d'un fragment à l'autre.

public void switchToFragment1() { 
    getSupportFragmentManager().beginTransaction() 
     .replace(R.id.fragment_container, new Fragment1()).commit(); 
} 

public void switchToFragment2() { 
    getSupportFragmentManager().beginTransaction() 
     .replace(R.id.fragment_container, new Fragment2()).commit(); 
} 

Maintenant, à partir du bouton clic dans votre Fragment1 vous pouvez lancer le Fragment2 via,

((YourActivity) getActivity()).switchToFragment2(); 

Et la même chose lors du passage à Fragment1

((YourActivity) getActivity()).switchToFragment1(); 
0

Votre question a besoin de plus code clarté.

Est-ce que Fragment1 ajoute Fragment2 via getSupportFragmentManager() ou getChildFragmentManager()? Vraisemblablement, il semble que vous faites le premier, et si c'est le cas, vous utilisez incorrectement l'API Fragment. Des fragments ne sont pas censés connaître les uns les autres, par Android's Fragment Documentation:

Souvent, vous voulez un fragment de communiquer avec un autre, par exemple pour changer le contenu en fonction d'un événement utilisateur. Toute la communication Fragment-to-Fragment est effectuée via l'activité associée. Deux fragments ne doivent jamais communiquer directement.

Vous devez donc mettre en œuvre les auditeurs appropriés pour communiquer de Fragment1 à l'activité, qui peut alors décider où/quand ajouter Fragment2 - puis utiliser correctement la fonctionnalité de la pile arrière de getSupportFragmentManager().addToBackStack() ... avec getSupportFragmentManager().popBackStack(). Voir Android Documentation on Back Navigation for Fragments pour plus d'explications.