在Android文档装载机发现在http://developer.android.com/guide/components/loaders.html重新启动它说装载机的特性之一是:装载机的方向变化
配置更改后正在重建时,它们会自动重新连接到最后加载器的光标。因此,他们不需要重新查询他们的数据。
下面的代码似乎并没有反映这种行为,一个新的Loader创建一个完成查询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 API的8版本,并使用V4支持库。
2日编辑:
这很可能是由于在支持库中的错误,如果你想了解更多信息,看看这个bug提交:
看到这篇文章的更多信息:http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html – 2012-08-23 16:30:55
此外,你应该调用'getLoaderManager()'onActivityCreated' ...你当前的代码如果在第一次创建'Fragment'时'Activity'仍然是'null',将抛出'IllegalStateException'。 – 2012-08-23 16:37:52
@AlexLockwood,在您使用support-v4:18.0.0的例子中(做得好!)。当前版本是23.0.1,它包含这个错误。我测试的最新工作版本是22.0.0。 – 2015-09-24 08:58:54