ViewPager と FragmentStatePageAdapter を使用して検索結果を表示し、結果の各セットを独自のフラグメントにしています。データは、カスタム AsyncTaskLoader を使用してロードされます。他のアクティビティに移動したり、バックグラウンドに移動して戻ってきたりするときに、スクロール位置を保持したい。
ただし、別のアクティビティに移動して戻ってくると、ローダー マネージャーはローダーの onStartLoading() を呼び出し、データを不必要に再読み込みします。
protected void onStartLoading() {
if (results.size() > 0) {
Log.d(TAG, "onStartLoading() - deliver result");
deliverResult(mResults);
}
if (takeContentChanged() || results.size() == 0) {
Log.d(TAG, "onStartLoading() - force load");
// Needed for custom loaders
forceLoad();
}
// Register observer...
}
これは、スクロール位置を復元できないことも意味します(フラグメントの保存時に保存されます)。フラグメントの onResume でこのリロードを回避する方法はありますか? フラグメントがバックスタックから復元されたときに呼び出されない onActivityCreated() でのみ initLoader() を呼び出しています。
v4互換ライブラリを使用しています。
ありがとう!