Des Fragments de comportement: FragmentTransaction::replace() et inverser la backStack opération
J'appelle cette méthode pour aller de l'avant AFrag à BFrag:
showFragment()
{
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
//Add fragment to the container ContentView
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
//Add FADE effect
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
//Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
//Commit transaction
fragmentTransaction.commit();
}
Il montre un nouveau fragment (BFrag), remplacer le précédent (AFrag) et de garder les infos à propos de la transaction, de sorte qu'il peut être inversée/annulée automatiquement sur la touche retour enfoncée.
Quand l'arrière est enfoncé tout semble parfait, le fragment précédent est affiché (AFrag). Mais quand je vais de l'avant à nouveau (AFrag -> BFrag) j'ai eu un "Fragment déjà ajouté exception".
N'ai pas l'inverse/opération annulée supprimer le nouveau fragment (BFrag)? Est-ce le comportement attendu?
C'est bizarre parce que, après cela, j'ai décidé de mettre une case:
if(mBFrag.isAdded())
{
fragmentTransaction.show(mBFrag);
}
else
{
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
}
et des images fixes, il passe dans le else... et je reçois l'exception.
Toute réflexion sur ce que je fais mal, s'il vous plaît?
Thx.
OriginalL'auteur Axel M. Garcia | 2011-06-03
Vous devez vous connecter pour publier un commentaire.
avez-vous essayé d'utiliser une autre méthode, comme remove(), puis faire un ajout(). ou quelque chose de semblable? J'ai vu sur un autre post que la méthode replace() ne se comportent pas toujours correctement.
Je suis heureux d'entendre cela, je me demandais juste l'erreur a été avec mon code, comme toujours. Merci pour la clarification.
OriginalL'auteur Christ