2015-07-30 3 views
2

Dans mon activité, j'ai divers fragments. Par défaut, l'activité affiche une carte. Le clic listitem, fragment A, B ou C est affiché en utilisant le code suivant:Impossible de supprimer complètement le fragment imbriqué du fragment principal

protected void replaceFragment(int i) { 
    FragmentManager fragmentManager = getFragmentManager(); 
    android.app.FragmentTransaction fragmentTransaction = fragmentManager 
      .beginTransaction(); 
    switch (i) { 
    case FRAGMENT_A: 
     aFragment = new AFragment(); 
     fragmentTransaction.replace(R.id.main_framelayout_replace, 
       aFragment , TAG_A_FRAGMENT); 
     fragmentTransaction.commit(); 
     break;//and so on..... 
    default: 
     break; 
    } 
} 

Ici, je suis face à un problème: Quand je remplace Fraga avec FragB qui est le fragment imbriqué-à-dire qu'il contient fragment de liste et le détail en lui-même . Quand j'essaye d'enlever n'importe quel fragment autre que FragB, je peux le faire avec succès et montrer l'écran de carte par défaut mais quand je suis sur FragB et essaye de l'enlever, je ne peux pas voir l'écran de carte par défaut. Au lieu de cela, un écran blanc vide s'affiche.

Suppression de fragments se fait comme suit:

if (aFragment != null) { 
         fragmentManager.beginTransaction() 
           .remove(aFragment).commit(); 
        }//and so on... 

Pour FragB qui est d'avoir la liste et fragment détaillée, je fais aussi suivant onDetach de FragB,

fragmentManager.beginTransaction() 
        .remove(MainActivity.listFragment).commit(); 

que je fais quelque chose de mal ici? Toute aide appréciée.

Remarque: Je ne reçois aucune exception dans les tentatives d'interception. Toutes les lignes de code sont exécutées sans erreur, y compris onDetach de FragB.

Répondre

0

Dans votre classe FragB (qui étend Fragment), vous devez utiliser ChildFragmentManager pour gérer les fragments imbriqués.

+0

Essayé avec cela aussi, n'a pas fonctionné si ... Toujours le même problème d'écran vide. – GAMA

+0

Vos extraits de code sont un peu trop clairsemés. Je ne peux pas dire si vous appelez à la fois replace() et remove() sur FragA. Vous n'avez pas besoin de supprimer explicitement FragA, FragB ou FragC si vous appelez replace(). Les seuls fragments que vous devez supprimer explicitement sont les fragments enfants de FragB. – TeasingDart

+0

Chaque fois que j'ai besoin de basculer entre les fragments, j'utilise remplacer. Lorsque j'ai besoin de naviguer vers l'écran principal, j'utilise remove. Mais FragB étant un fragment imbriqué, j'appelle également la méthode remove pour les fragments enfants dans onDetach de FragB en plus d'appeler remove pour FragB lui-même. – GAMA