2016-03-04 3 views
1

J'ai une activité, et quatre types de fragment A, B, C, Dquestion FragmentTransaction backPressed BackStack

  1. d'abord, je vais vous montrer un exemple de Fraga dans HomeActivity - (FRAGMENT 1)

  2. de FRAGMENT1 Je vais charger une instance de fragB (FRAGMENT 2) (_ cette transaction ajouté à backstack)

  3. de 2 FRAGMENT Je vais charger une nouvelle instance de Fraga (FRAGMENT 3) (non ancien), (cette transaction n'est PAS ajoutée au backstack) (Donc FRAGMENT 2 devrait être détruit ed)

  4. Maintenant, je vais appuyer sur backButton, et cela ira à fragmenter 1 (donc 3 FRAGMENT sera détruit comme je pense)

    et fragment1 de backstack est chargé. À ce stade, On peut supposer maintenant il n'y a pas de fragments dans backstack. (Ce qui signifie que si je clique de nouveau il fermer l'application)

  5. maintenant de cette FRAGMENT 1, je vais aller à fragmenter 4 (instance de fragC) , (cette transaction je vais ajouter au backstack).

  6. Maintenant, je vais presse BackButton,

  7. maintenant théoriquement, il devrait charger FRAGMENT 1 (instance de Fraga). mais FRAGMENT 3 (instance de fragA) se charge.

(Je me demande comment est-ce que FRAGMENT3 est entré en image, il a été retiré et n'a pas été ajouté au backstack).

et d'autres questions semblables vient à l'image, si je vais plus loin

et ceci est mon code dans onbackpressed

@Override 
    public void onBackPressed() { 

    if(getSupportFragmentManager().getBackStackEntryCount() > 1){ 

     getSupportFragmentManager().popBackStackImmediate(); 
    }else { 
     super.onBackPressed(); 

    } 
} 
+0

oui même problème que j'ai affronté une fois. comme je me souviens sur la presse arrière, vous devez supprimer la transaction fragment avant d'ajouter ou remplacer un nouveau. Transaction.remove ... –

+0

oui, je le fais. –

+0

alors ça marche? ou pas ? –

Répondre

0

Je pense que vous n'avez pas besoin d'appeler popBackStackImmediately() dans votre mise en œuvre de onBackPressed. Cela a toujours fonctionné pour moi sans sauter manuellement le BackStack. (Une chose que je fais dans onBackPressed() par exemple est de s'assurer que le NavigationDrawer est fermé). Il est donc probable que vous ayez deux fois le backstack: une fois c'est fait automatiquement et une fois que vous le déclenchez en appelant popBackStackImmediately(). Cela peut entraîner des problèmes et un comportement inattendu lors de la commutation des fragments.