http://developer.android.com/guide/components/loaders.htmlにあるローダーの Android ドキュメントには、ローダーのプロパティの 1 つが次のように記載されています。
構成の変更後に再作成されると、最後のローダーのカーソルに自動的に再接続します。したがって、データを再クエリする必要はありません。
次のコードはその動作を反映していないようです。新しいローダーが作成され、ContentResolver のクエリが終了し、画面が回転してローダーが再作成されます。
public class ReportFragment extends Fragment implements LoaderCallbacks<Cursor> {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(1, null, this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_report, container, false);
return v;
}
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
Log.d("TEST", "Creating loader");
return new CursorLoader(getActivity(), ResourcesContract.Reports.CONTENT_URI, null, null, null, null);
}
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
Log.d("TEST", "Load finished");
}
public void onLoaderReset(Loader<Cursor> arg0) {
}
}
私のlogcatからの出力は次のとおりです。
08-17 16:49:54.474: D/TEST(1833): Creating loader
08-17 16:49:55.074: D/TEST(1833): Load finished
*Here I rotate the screen*
08-17 16:50:38.115: D/TEST(1833): Creating loader
08-17 16:50:38.353: D/TEST(1833): Load finished
ここで何が間違っているのか分かりますか?
編集:
私は Android Google API のバージョン 8 をビルドしており、v4 サポート ライブラリを使用していることに注意してください。
2回目の編集:
これは、サポート ライブラリのバグが原因である可能性が最も高いです。詳細情報が必要な場合は、このバグの送信をご覧ください。