2016-11-15 8 views
0

j'ai un fragment dans lequel il est un fragment imbriqué que j'ajoute ainsi:fragment Nested et pile retour

  if (home == null) { 
       home = new MyFragment(); 
       FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
       transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
       transaction.addToBackStack(MyFragment.class.getName()); 
       transaction.add(R.id.child_fragment, home).commit(); 
      } 

Quand je rentre un autre fragment et retourne le fragment d'enfant d'en haut est pas là. J'ai vérifié et l'instance est différente de null.

MISE À JOUR: J'ai changé le code comme suggéré par Ashwin S Ashok mais cela ne fonctionne toujours pas.

+0

essayez d'utiliser ajouter non remplacer. – zerocool

+0

En supposant que le code ci-dessus se trouve dans le fragment parent, cela fonctionne-t-il si vous changez 'getFragmentManager()' en getChildFragmentManager() '? – clownba0t

+0

ajouter/remplacer donne le même résultat – charbinary

Répondre

0

Essayez d'utiliser ces méthodes:

// Utilisez cette option si vous ne souhaitez pas conserver le fragment.

protected void replaceFragmentStack(int container, Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(container, fragment); 
    fragmentTransaction.commit(); 
} 

// Utilisez cette option si vous souhaitez ajouter les fragments dans une pile.

protected void addFragmentStack(int container, Fragment fragment, String tag) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    fragmentTransaction.add(container, fragment, tag); 
    fragmentTransaction.addToBackStack(tag); 
    fragmentTransaction.commit(); 
} 
+0

J'ai essayé avec votre suggestion, mais cela ne fonctionne pas à nouveau. Mes autres fragments fonctionnent correctement mais pas avec le fragment imbriqué. – charbinary

0

Je vous suggère d'utiliser getChildFragmentManager() lors de transactions à l'intérieur d'un fragment. Et c'est un bug je suppose. Vous pouvez consulter ce fil, il vous aidera beaucoup Android 4.2: back stack behaviour with nested fragments

Aussi, vous devez passer par les curieux Techizen de blog

Voici le lien pour l'échantillon github project pour même mécanisme

J'espère que cette va vous aider.

+0

Merci beaucoup pour l'info. Mais je voudrais vraiment le faire sans la bibliothèque de soutien parce que je devrais faire beaucoup de changements aux fragments. – charbinary