在http://developer.android.com/guide/components/loaders.html中的Android加载器文档中,它指出加载器的一个特性是:
在配置更改后重新创建时,它们会自动重新连接到上一个加载器的游标。因此,它们不需要重新查询其数据。
以下代码似乎没有反映出这种行为,一个新的加载器被创建并完成查询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支持库。
第二次编辑:
这很可能是由于支持库中的一个bug导致的,如果您想要更多信息,请查看此错误提交:
onActivityCreated
中调用getLoaderManager()
... 如果在Fragment
第一次创建时Activity
仍然为null
,你当前的代码将抛出一个IllegalStateException
。 - Alex Lockwood