J'utilise cette méthode sur mon Activité conteneur pour afficher une BFrag
public void showBFrag()
{
// Start a new FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
if(mBFrag.isAdded())
{
Log.d(LOG_TAG, "Show() BFrag");
fragmentTransaction.show(mBFrag);
}
else
{
Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
}
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
Je l'appelle de mes Activités de manutention de conteneurs; pour la première fois:
- rentre dans le else et mBFrag remplacer mAFrag.
Alors j'ai appuyer sur le bouton de retour:
- et le fonctionnement est inversé (mAFrag est montré, mais.. est-ce que mBFrag est supprimé?).
Puis-je aller de l'avant à nouveau en appelant showBFrag() de la même Activité:
- et il obtient de NOUVEAU dans le else. (donc je peux en déduire que mBFrag n'est PAS AJOUTÉ)
- mais j'ai reçu un Fragment déjà ajouté l'exception IllegalStateException... (alors pourquoi il n'a pas entrer dans l'instruction si à la place?)
Donc:
- Pourquoi le isAdded() la méthode ne retourne pas VRAI que si je reçois un Fragment déjà ajouté l'exception IllegalStateException??
- Ne popBackStack opération de supprimer complètement précédemment ajouté des fragments?
- Ce comportement je suis malentendu?
EDIT: Ici est l'info de l'exception.
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment already added: BFrag{40b28158 id=0x7f0c0085}
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:322)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:360)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:352)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at myPackageName.containerActivity.showBFrag() // This line: "fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);"