ICS のフラグメントの使用に少し苦労しています。私はかなりの量の計算作業を行うフラグメント (AnalysisFragment と呼びます) を取得し、ファイルを読み取り、それに対して多くの計算を実行します。この作業のほとんどは onActivityCreated で開始されます。これは、作業を行う前にアプリの設定ファイルを参照する必要があるためです。これには、アクティビティを介してアクセスできるコンテキストが必要ですが、onActivityCreated が呼び出されるまで必ずしも使用できるとは限りません。
さて、ディスプレイを回転させるたびに、この作業がまた (2 回!) 行われているようです。私の LogCat では、onDestroyView と onDestroy が (1 回) 発生し、その後に onCreate、onCreateView、および onActivityCreated (2 回) が続き、すべて AnalysisFragment に関連しています。
明らかに、別の向きで画面を再描画する作業をやり直す必要がありますが、2 回目の (3 回目は言うまでもなく) 数を処理する作業を回避する方法はありますか?
次のように、ユーザーが分析する新しいファイルを選択するたびに、AnalysisFragment の新しいコピーをインスタンス化していることを追加する必要があります。
public static AnalysisFragment newInstance
(
String ndsFileName,
ViewIndicator viewIndicator
)
{
AnalysisFragment analysisFragment = new AnalysisFragment( );
Bundle bundle = new Bundle( );
bundle.putString( "nds_file_name", ndsFileName );
bundle.putString( "view_indicator", viewIndicator.toString( ) );
analysisFragment.setArguments( bundle );
return analysisFragment;
}
ただし、再オリエンテーション中は、Android が私に代わってそれを行っているに違いありません。作成したインスタンスをシャットダウンした後、新しい画面の向きに同じバンドルを使用して別のインスタンスを作成します。最終的に、新しいインスタンスで onActivityCreated が呼び出され、私のコードは、少し前に読み取った同じファイルを読み取らず、数値計算をやり直しています。
どんな洞察もいただければ幸いです...