2

フラグメントを使用してタブをロードしているタブホストコントロールがあります。

タブが切り替わるたびに、古いフラグメントが切り離され、新しいフラグメントがアタッチされます。

このプロセス中にOnCreateViewメソッドが呼び出され、毎回ビューが再作成されるため、状態の多くが失われていることに気付きました。ただし、編集テキストの値などの一部のビューステートがデタッチ/アタッチ間で維持されていることに気付きました。

ビューが完全に破棄されて新しいビューとして再作成されているときに、Androidがどのように自動的に状態を復元しているのか疑問に思っています。タブを切り替えるだけの場合、BundlesavedInstanceStateの値は常にnullです。バンドルsavedInstanceStateは、画面を回転させるなどの操作を行った場合にのみ入力されます。

私が知る限り、この状態の復元は、フラグメントonStartメソッドが呼び出される直前に行われています。

4

2 に答える 2

9

フラグメントをアタッチおよびデタッチすると、ビューのみが破棄され、フラグメントインスタンスは同じままになります。

フラグメントマネージャーはIDを持つビューの状態を復元し、savedInstanceStateはnullです。

ローテーションの場合、フラグメントはおそらく別の場所(アクティビティのonCreate()?)で再作成されます。

于 2012-12-05T22:20:09.140 に答える
0

フラグメントがウィンドウから削除(または置換)されようとしているとき、そのonSaveInstanceState(Bundle)(またはonRestoreInstanceState(Bundle))メソッドが呼び出されます。これはフラグメント階層を介して伝播し、以前の状態を復元します。

于 2012-10-16T14:58:54.620 に答える