2017-04-19 13 views
2

を交換するとき、私はこのコードを使用して移行2つのフラグメントがあります。私は2つのフラグメントの間を移行するとき、私は間にいくつかのクリーニングを行う必要があるだろうonPause()とonResume()順フラグメント

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

を。私はこのクリーンアップコードをフラグメントのonPause()メソッドに入れます。問題は今、第2のフラグメントのonResume()が第1のフラグメントのonPause()の前に起こるということです。

各フラグメントのonPause()、onResume()、onStopこれはそれが吐き出す順序です。

FRAGMENT 2 RESUMED 
FRAGMENT 1 PAUSED 
FRAGMENT 1 STOPPED 

これらの2つのフラグメントを調整して、各トランジション間をクリーンアップできる方法はありますか?

+1

コミットする前に、['transaction.setAllowOptimization(false)'](https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean))を実行します。 – azizbekian

+0

あなたは命を救っています。私はそれを指定できるようにこれを答えとして入れてください。 – FireDragonMule

答えて

1

コミットする前にtransaction.setAllowOptimization(false)を実行します。

Googleは、デフォルトでサポートライブラリの最新バージョンで有効になっている最適化を導入しました。

docsから:

最適化の副作用は、フラグメントが予想される順序のうち、状態の変化を有することができるということです。たとえば、あるトランザクションでフラグメントAが追加され、2番目のフラグメントにフラグメントBが追加され、次に3番目のフラグメントにフラグメントAが削除されます。最適化がなければ、フラグメントBはフラグメントBの後に削除されるため、を添加した。最適化を行うと、フラグメントAの追加/削除が最適化されるため、フラグメントBが作成されたときにフラグメントAが存在することは期待できません。

これらの最適化では、そのAPIのユーザーが依存している論理を破ることがあります。

関連する問題