3

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
4

1 に答える 1