【发布时间】:2017-09-10 00:29:15
【问题描述】:
在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 支持库。
第二次编辑:
这很可能是由于支持库中的错误,如果您想了解更多信息,请查看此错误提交:
【问题讨论】:
-
另外,您应该在
onActivityCreated中调用getLoaderManager()... 如果首次创建Fragment时Activity仍然是null,您当前的代码将抛出IllegalStateException. -
@AlexLockwood,在您的示例中(干得好!)您使用的是 support-v4:18.0.0。当前版本是 23.0.1,它包含这个错误。我测试的最新工作版本是 22.0.0。
-
我将它作为错误提交:code.google.com/p/android/issues/detail?id=187391 支持的最新版本是 22.2.1。
标签: android