2016-06-02 11 views
0

Ich habe ein Elternteil Fragment enthält ein Kind Fragment, die einige Daten anzeigt.Entfernen von ChildFragmentManager funktioniert nicht wie erwartet

Irgendwann sendet das Kindfragment, dass der Benutzer fertig ist (dass keine Daten angezeigt werden). An dieser Stelle möchte ich dieses nutzlose Fragment entfernen, aber irgendwie gelingt es mir nicht. Fehle ich etwas?

So wie ich das Fragment zu dem Behälter hinzufügen (und es funktioniert wirklich gut):

Die Art, wie ich zu gehobelt entfernen (aber es nicht funktioniert und es ist all die Variationen, die ich versucht habe):

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(); 

Ich vermisse etwas?

Dank

PS: Wenn ich sage, dass es nicht funktioniert: ich meine das Fragment nicht entfernt zu werden, und ich habe keine Ausgabe in logcat

UPDATE

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()); 

Hat für ein Ergebnis:

1 
1 
+0

Was genau funktioniert nicht? Erhalten Sie Ihre Laufzeitausnahme? Oder ist das Fragment nicht entfernt ..? Haben Sie Informationen in Ihrem Logcat? – yennsarah

+0

@Amy tut mir leid, das Fragment wird nicht entfernt und ich habe keine Informationen/Absturz in meinem Logcat. Lautlos fehlgeschlagen ... –

+0

Sie fügen Ihre FragmentTransaction nicht dem Backstack hinzu, daher glaube ich nicht, dass das Ergebnis ein Ergebnis sein wird. Hast du versucht es zu debuggen? Setzen Sie einen Haltepunkt auf das "Swipe" -Fragment und überprüfen Sie, ob es angezeigt, ausgeblendet, zweimal aufgeblasen oder so ähnlich ist. – yennsarah

Antwort

0

ich es ausgetestet und schließlich fand ich, worum es war und es tut mir leid ist es nicht mit dem Code im Zusammenhang ich gepostet. Trotzdem ist es sehr interessant!

Das Problem war in der onCreateView der Ansicht:

Es wird verwendet, so zu sein:

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

das ein Problem ist, weil ich das Fragment denken ist dann irgendwie mit der nicht zugeordnet Ansicht ... Aber es funktioniert perfekt, weil die Ansicht den Container verwendet und alles in Ordnung ist

Stattdessen verwenden Sie:

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

Wenn Sie so tun, ist alles in Ordnung!

Ich entdeckte das Problem, weil ich versuchte, die Ansicht transparent zu machen, und ich rief die Fragment.getView() an, die mir null zurückgab.

Das war eine böse. Danke für Ihre Hilfe!

1

t ry dieses:

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

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

Reference

+0

Nein, wenn du dir den Code anschaust, den ich hatte; Ich habe das schon ... Ich habe mehr Informationen, habe meinen Code bearbeitet –