2016-06-02 1 views
0

J'ai un parent Fragment contenant un enfant Fragment qui affiche des données.Supprimer de ChildFragmentManager ne fonctionne pas comme prévu

À un certain point, le fragment d'enfant diffuse que l'utilisateur a terminé (qu'il n'y a pas de données à afficher). À ce stade, je veux supprimer ce fragment inutile, mais je ne réussis pas en quelque sorte. Est-ce que je manque quelque chose?

La façon dont je ajouter le fragment au récipient (et il fonctionne très bien):

La façon dont je rabotés à supprimer (mais cela ne fonctionne pas et est toutes les variations j'ai essayé):

Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe"); 
if (swipe == null){ 
    throw new RuntimeException("Nope"); 
} 
getChildFragmentManager().beginTransaction().remove(swipe).commit(); 
getChildFragmentManager().beginTransaction().hide(swipe).commit(); 
getChildFragmentManager().popBackStack(); 
getFragmentManager().beginTransaction().remove(swipe).commit(); 

Quelque chose me manque?

Merci

PS: Quand je dis que cela ne fonctionne pas: je veux dire le fragment ne se retire et je n'ai pas de sortie dans logcat

MISE À JOUR

Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe"); 
    if (swipe == null){ 
     throw new RuntimeException("Nope"); 
    } 
    Log.d("DEBUG", ""+getChildFragmentManager().getFragments().size()); 
    getChildFragmentManager().beginTransaction().remove(swipe).commit(); 
    getChildFragmentManager().popBackStack(); 
    Log.d("DEBUG", ""+getChildFragmentManager().getFragments().size()); 

A pour un résultat:

1 
1 
+0

Qu'est-ce qui ne fonctionne pas exactement? Obtenez-vous votre Exception d'exécution? Ou est le fragment non enlevé ..? Avez-vous des informations dans votre logcat? – yennsarah

+0

@Amy désolé, le fragment n'est pas supprimé et je n'ai aucune information/crash dans mon logcat. Échoue silencieusement ... –

+0

Vous n'ajoutez pas votre fragmentTransaction au backstack, donc je ne pense pas que le popping apportera un résultat. Avez-vous essayé de le déboguer? Définissez un point d'arrêt sur le fragment 'swipe' et vérifiez s'il est affiché, caché, deux fois gonflé ou quelque chose comme ça. – yennsarah

Répondre

0

Je débogué et j'ai finalement trouvé ce qu'il était tout au sujet et je suis désolé qu'il ne soit pas lié au code que j'ai posté. Néanmoins, c'est très intéressant!

Le problème était dans le onCreateView de la vue:

Il fut un temps comme celui-ci:

View v = inflater.inflate(R.layout.swipe_layout, container); 
// Bla bla 
return null; 

Ce problème parce que je pense que le fragment est alors en quelque sorte pas associé à la vue ... Mais cela fonctionne parfaitement parce que la vue utilise le conteneur et tout va bien

A la place, utilisez:

View v = inflater.inflate(R.layout.swipe_layout, container, false); 
// Bla bla 
return v; 

Si vous le faites, tout va bien!

J'ai détecté le problème car j'ai essayé de rendre la vue transparente et j'ai appelé le Fragment.getView() qui m'a renvoyé null.

C'était un méchant. Merci pour votre aide les gars!

1

t ry celui-ci:

Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe"); 
if (swipe == null){ 
    throw new RuntimeException("Nope"); 
} 

getChildFragmentManager().beginTransaction().remove(swipe).commit(); 
getChildFragmentManager().popBackStack(); 

Reference

+0

Non, si vous regardez le code que j'avais; J'ai déjà ça ... J'ai plus d'informations, j'ai édité mon code –