我正在使用 FragmentPagerAdapter 来实现选项卡式界面。我的第 0 个片段在创建时创建了一个加载器,并尝试在 onActivityCreated() 中重新连接到加载器。这是课程:
public class My0thFragment extends Fragment {
private boolean ranOnce = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onActivityCreated() {
if (!ranOnce) {
// if the first time we're being created, do an initial load of data.
getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
ranOnce = true;
} else {
// reconnect?
getLoaderManager().initLoader(500, null, mMyCallback);
// sanity check.
printAllLoaders(getLoaderManager());
}
}
private LoaderManager.LoaderCallbacks<Foo> mMyCallback = new LoaderManager.LoaderCallbacks<Foo>() {
@Override
public Loader<Foo> onCreateLoader(int arg0, Bundle arg1) {
return new FooLoader(getActivity(), arg1);
}
@Override
public void onLoadFinished(Loader<Foo> arg0, Foo arg1) {
Log.e(tag, "onLoadFinished()!");
}
@Override
public void onLoaderReset(Loader<Foo> arg0) {
Log.e(tag, "onLoaderReset()!");
}
};
}
这是场景:
- App启动,在FragmentPagerAdapter中创建了第0个fragment。
- 调用 onActivityCreated() 方法,该方法在第一次运行时创建并启动加载程序。
- 在加载程序完成之前,我快速切换到另一个选项卡。
- 我可以通过日志看到加载程序完成,但我的回调永远不会得到 onLoadFinished() 回调。我认为这是因为片段处于某种分离状态,具体取决于 FragmentPagerAdapter 的工作方式。
- 返回到第 0 个选项卡,我看到 onActivityCreated() 被调用,并且再次调用了 initLoader() 方法。回调仍然没有触发。
- 此时我可以打印加载器管理器中的所有加载器,并看到我的加载器仍然坐在加载器管理器中。
所以我被困在这里,我一定做错了什么,因为加载器的东西必须是为我们开发人员考虑到片段生命周期而设计的。谁能指出我在这里做错了什么?
谢谢