500*_*865 7 android fragment android-loadermanager android-loader
给定一个使用加载器从数据库加载(大量)数据的片段.
问题:
我有一个寻呼机适配器,当用户离开拿着它的标签时会破坏该片段,并在用户返回该标签时重新创建它.由于这种重新创建,每次都会创建一个新的加载器,并且每次都会加载数据.
题 :
为了避免每次创建片段时重新创建加载器,是否可以在片段getActivity.getSupportLoaderManager.initLoader(loaderId, null, false)的onActivityCreated方法中使用?
我试过它,测试它,似乎工作正常.但我不相信这是对的.
事实上,检查源代码,你最终会做同样的事情。
Fragment.getLoaderManager:
/**
* Return the LoaderManager for this fragment, creating it if needed.
*/
public LoaderManager getLoaderManager() {
if (mLoaderManager != null) {
return mLoaderManager;
}
if (mActivity == null) {
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
}
mCheckedForLoaderManager = true;
mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, true);
return mLoaderManager;
}
Run Code Online (Sandbox Code Playgroud)
mWho基本上是片段ID。
final void setIndex(int index, Fragment parent) {
mIndex = index;
if (parent != null) {
mWho = parent.mWho + ":" + mIndex;
} else {
mWho = "android:fragment:" + mIndex;
}
}
Run Code Online (Sandbox Code Playgroud)
区别在于Activity.getLoaderManager()谁将成为(root)
因此,即使您可以执行您所要求的操作,直接从片段调用它可能是更好的方法
免责声明:我只检查了最新版本的源代码,但我不认为它有很大不同