2014-07-04 5 views
1

J'ai une activité avec deux régions, gauche et droite. La région de gauche est utilisée pour naviguer et le droit de montrer les détails. Je résous cela en utilisant des fragments et en ajoutant des changements à gauche au backstack. Mais dans un seul cas, le fragment de gauche est retiré bien que je ne fasse que remplacer le fragment de droite.Le remplacement de fragment supprime un autre fragment

Vous pouvez cloner le code sur GitHub: https://github.com/Ben-Ho/fragmentProblem

Procédez comme suit pour reproduire le problème:

  1. Démarrer App
  2. Cliquez sur "Ouvrir Fragment B"
  3. Cliquez sur « Ouvrir Fragment C Cliquez sur "Ouvrir le fragment B"
  4. Cliquez sur "Ouvrir Fragment C"
  5. Maintenant, le fragment gauche est parti, mais ne devrait pas

Le même phénomène se produit avec le fragment D, mais pas lors de la première cliquant fragment fragment C et puis en cliquant sur D.

Je n'ajoute pas les fragments C et D au backstack parce que je veux changer uniquement la région de gauche lorsque l'utilisateur clique sur le bouton de retour ...

La région de gauche ne doit jamais être vide. Il devrait basculer entre le fragment A et B en cliquant sur "Open Fragment B" et Android Back-Button.

Pourriez-vous s'il vous plaît me dire ce que je fais mal?

Répondre

0

Ok, je ne l'ai pas trouvé une solution qui ne se sent pas comme un hack ... Voici donc ma solution à ce problème :

  1. ajouter chaque fragment de changement à backstack
  2. Nom les états que vous souhaitez revenir à
  3. Dans mon cas, ajouter un popBackStack supplémentaire parce que d'abord l'état sans fragments ne doit pas être accessible

Pour le code complet voir ce commit:

https://github.com/Ben-Ho/fragmentProblem/commit/f08192098be7187d5f4bf08e8119ce58e60fbecc

0

Ensuite, dans votre contenant override d'activité onBackPressed():

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().findFragmentByTag("FragmentC") != null) { 
    // I'm viewing Fragment C 

    } else { 
    super.onBackPressed(); 
    } 
} 
+0

Je ne veux pas mettre en œuvre la commutation manuellement s'il est possible de le faire avec Android backstack. .. –

+0

Le problème est que FragmentB est supprimé. –

Questions connexes