2017-04-19 5 views
2

Ich habe 2-Fragmente zu ersetzen, die ich diesen Codeübergang unter Verwendung von:onPause() und onResume(), um, wenn Fragmente

private void switchTo(Fragment frag) { 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction transaction = fm.beginTransaction(); 
    transaction.replace(R.id.contentPanel, frag); 
    transaction.commit(); 
} 

Wenn ich zwischen den 2 -Fragmente Übergang, würde ich einige Reinigung dazwischen tun müssen, . Ich habe diesen Cleanup-Code in die onPause() -Methode des Fragments eingefügt. Das Problem ist nun, dass OnResume() des 2. Fragments vor onPause() des 1. Fragments

ich eine Print-Anweisung in jedem Fragment OnPause(), OnResume() und OnStop() der beiden Fragmente und Das ist die Reihenfolge, in der es es ausspuckt.

FRAGMENT 2 RESUMED 
FRAGMENT 1 PAUSED 
FRAGMENT 1 STOPPED 

Gibt es eine Möglichkeit, diese 2-Fragmente zu koordinieren, so dass I in zwischen jedem Übergang aufzuräumen kann?

+1

Führen Sie [transaction.setAllowOptimization (false) '] (https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization (boolean)) aus, bevor Sie es ausführen. – azizbekian

+0

Du bist ein Lebensretter. Bitte stelle dies als Antwort dar, damit ich es bestimmen kann. – FireDragonMule

Antwort

1

Führen Sie transaction.setAllowOptimization(false) durch, bevor Sie es ausführen.

Google führte Optimierungen ein, die standardmäßig in den neuesten Versionen von support libs aktiviert sind.

Von docs:

Der Nebeneffekt der Optimierung ist, dass Fragmente Zustandsänderungen aus der erwarteten Reihenfolge haben. Zum Beispiel fügt eine Transaktion Fragment A hinzu, eine zweite fügt Fragment B hinzu, dann entfernt eine dritte Fragment A. Ohne Optimierung könnte Fragment B erwarten, dass während der Erstellung Fragment A auch existiert, weil Fragment A nach Fragment B entfernt wird wurde hinzugefügt. Bei der Optimierung kann Fragment B nicht erwarten, dass das Fragment A existiert, wenn es erstellt wurde, da das Hinzufügen/Entfernen von Fragment A optimiert wird.

Diese Optimierungen brechen manchmal Logiken, von denen wir als Nutzer dieser API abhängig sind.

Verwandte Themen