1

私は現在、メインのアクティビティがFragmentActivity (サポート ライブラリ) を拡張する Android アプリケーションに取り組んでいます。このアクティビティにはViewPagerビューが含まれており、そのアダプターはFragmentStatePagerAdapterです。正確には、アダプターは FragmentStatePagerAdapter を拡張するカスタム サブクラスです。

Adapter クラスには Fragment インスタンスを返す getItem() メソッドがあります。getItem() が呼び出されるたびに新しいフラグメントを作成しないように、これらのフラグメントを SparseArray 内に格納します。アクティビティが破棄されると、この配列がクリアされるので、アクティビティが再作成されたときにこれらすべてのフラグメントを再度作成したいと考えています。

シナリオがあります: ユーザーがアプリを起動し、次に Android のホーム (ランチャー) 画面に移動し、別のアプリで作業すると、Android OS がアプリケーションを強制終了してメモリを解放します。ユーザーがアプリケーションに戻ると (アプリケーションは最初から再起動されるのではなく、ユーザーが残した場所から再作成されて再開されます)、次の一連のコールバック呼び出しを監視します。

Application: onCreate() called
Fragment: onAttach() called
Fragment: onCreate() called
Activity: onCreate() called
Fragment: onViewCreated() called
Activity: onStart() called

複数の Fragment があります (ViewPager は、現在のフラグメントとその隣の 2 つ (次と前) に対して getItem() を呼び出します) が、単純化するためにフラグメントが 1 つしかないと考えてみましょう。

以前は、アクティビティの onCreate() はフラグメントのものよりも早く呼び出す必要があると考えていました。これは、OS によって以前に強制終了されたバックグラウンド状態からアプリが戻された場合にのみ発生します。

このアクティビティ内で何かを表示する前に、バックグラウンド アクションを実行したい (フラグメントを含むため、onCreate() メソッドを早期に呼び出したくない)。説明されているケースでこれを行うにはどうすればよいですか?

4

1 に答える 1

0

その時点でホスト アクティビティが確実に作成されるようにするには、onActivityCreated()コールバックを使用する方がよいことがわかりました。そのため、Fragment のonCreate()メソッド内の UI で重要なことを行う必要はありません。

于 2013-03-11T13:38:52.887 に答える