Android Fragment – 使用activity的loadermanager而不是Fragment.好吗?

前端之家收集整理的这篇文章主要介绍了Android Fragment – 使用activity的loadermanager而不是Fragment.好吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定一个使用加载器从数据库加载(大量)数据的片段.

问题:

我有一个寻呼机适配器,当用户离开拿着它的标签时会破坏该片段,并在用户返回该标签时重新创建它.由于这种重新创建,每次都会创建一个新的加载器,并且每次都会加载数据.

题 :

为了避免每次创建片段时重新创建加载器,是否可以在片段的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

免责声明:我只检查了最新版本的源代码,但我不认为它会有很大不同

猜你在找的Android相关文章