2013-06-26 10 views
5

Ich dachte, ich hätte verstanden, dass Sie in onCreate() und FragmentTransaction.remove() in onDestroy() FragmentTransaction.add() aufrufen sollen. Meine App stürzt in onDestroy() mit diesem Fehler:Android: Wann ist es angebracht, FragmentTransaction.remove zu verwenden?

06-26 15:25:50.213: E/AndroidRuntime(579): java.lang.RuntimeException: Unable to destroy activity {com.myapp/com.myapp.MainActivity}: java.lang.IllegalStateException: Activity has been destroyed 

Wann rufe ich diese Dinge, wenn nicht in onCreate/onDestroy()?

+3

Sie müssen Ihre Fragmente nicht manuell zerstören, wenn die Aktivität zerstört wird - das wird vom Fragment-Framework für Sie verwaltet. – CommonsWare

+0

OK. Ich habe das gelesen, während ich online nach Lösungen gesucht habe. Mein Problem damit ist, dass, wenn ich zu meiner horizontalen Ansicht und dann zurück zu meiner vertikalen Ansicht wechsel, ich ein doppeltes Layout für mindestens eines der verschachtelten Fragmente habe. Es gibt ein Layout für dieses Fragment oben, das keine Updates von setText erhält, und dann eine weitere Kopie des Layouts direkt darunter, die Updates von setText erhält. – KairisCharm

Antwort

3

My problem with that is that when I switch to my horizontal view, and then back to my vertical view, I now have a duplicate layout for at least one of the nested fragments.

Meine Vermutung ist, dass dies, weil Sie sind immer das Fragment in onCreate() Zugabe. Android erstellt Fragmente automatisch bei Konfigurationsänderungen neu. Daher sollte onCreate() prüfen, ob das Fragment schon vor der Zugabe existiert:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null) { 
     getSupportFragmentManager().beginTransaction() 
           .add(android.R.id.content, 
             new RotationFragment()).commit(); 
    } 
    } 
+0

Sie haben wahrscheinlich Recht. Aber wenn ich mache if (getChildFragmentManager(). FindFragmentByTag ("MyFrag") == null) Ich bekomme immer eine Rückkehr von wahr. – KairisCharm

2

Ok, Ihre Lösung gearbeitet, mit der Ausnahme statt mit:

if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null) 

I verwendet:

if (savedInstanceState==null) 

Offenbar ist der Fragmentmanager nicht durch die onCreate-Funktion eingerichtet. Aber da deine Antwort meistens korrekt ist, markiere ich sie als Antwort.

Ich möchte Ihnen noch einmal danken. Dies ist das zweite Mal, dass Sie mir eine große Hilfe waren und ich schätze es sehr.

Verwandte Themen