给定一个使用加载器从数据库加载(大量)数据的片段.
问题:
我有一个寻呼机适配器,当用户离开拿着它的标签时会破坏该片段,并在用户返回该标签时重新创建它.由于这种重新创建,每次都会创建一个新的加载器,并且每次都会加载数据.
题 :
为了避免每次创建片段时重新创建加载器,是否可以在片段的onActivityCreated方法中使用getActivity.getSupportLoaderManager.initLoader(loaderId,null,false)?
我试过它,测试它,似乎工作正常.但我不相信这是对的.
解决方法
实际上,检查源代码,你最终也会这样做.
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; }
mWho基本上是片段ID.
final void setIndex(int index,Fragment parent) { mIndex = index; if (parent != null) { mWho = parent.mWho + ":" + mIndex; } else { mWho = "android:fragment:" + mIndex; } }
Activity.getLoaderManager()的区别在于谁(root)
所以即使你可以做你想要的,直接从Fragment调用它可能是一个更好的方法
> Activity source code
> Fragment source code
免责声明:我只检查了最新版本的源代码,但我不认为它会有很大不同
原文地址:https://www.jb51.cc/android/314947.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。