私FragmentActivity
はいくつかのフラグメントを使用しています。構成が変更されたとき (ローテーション時)、システムは各フラグメントを破棄して再作成します。
この再作成されたフラグメントを使用しようとします
mFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_frame);
そしてそれを新しいレイアウトに置きます
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_frame, mFragment )
.commit();
しかし、奇妙な動作に遭遇します。いくつかのフラグメントが失われます。それらは画面に表示されなくなります。その場所は空です。
ログはフラグメントが正常に再作成されたことを示していますが、さらにフラグメントが再び破棄され、再度作成され、再び破棄されたことを示しています。
show の問題のテスト プロジェクトをより明確に、ハスクなしでビルドします。
そしてその実証可能な結果 (画像を挿入するのに十分な評判ではありません)
アクティビティ開始画像
アクティビティ回転画像
A、B、C、D は、fragments
構成を変更した後にわかるように、一部のフラグメントが失われています (B、D)
私が間違っていることを教えてください
ここに役立つコードがあります(編集:試しやすくするためにコードをgitHubにプッシュしてください)
https:// github.com/nailgilaziev/TestFragmentsRetain
p/s リンク失礼します
デバイスを回転させた後、ここで猫をログに記録します
MainActivity: onPause Activity
MainActivity: onStop Activity
MainActivity: onDestroy Activity
A: onDestroyview
A: onDestroy
B: onDestroyview
B: onDestroy
C: onDestroyview
C: onDestroy
D: onDestroyview
D: onDestroy
MainActivity: onCreate Activity
A: onCreate
B: onCreate
C: onCreate
D: onCreate
MainActivity: replaced
MainActivity: onStart Activity
A: onCreateView
B: onCreateView
C: onCreateView
D: onCreateView
<--before this point all fine and then strange behavior began
for the lost fragments(B,D) are performed unnecessary calls-->
B: onDestroyview
B: onDestroy
D: onDestroyview
D: onDestroy
D: onCreate
D: onCreateView
MainActivity: onResume Activity