getLoaderManager()
的{p> android.support.v4.app.Fragment
和来自getSupportLoaderManager()
的{{1}}
他们会回归同样的事吗?我在文档中找不到它。如果没有,哪一个应该与片段内的支持库一起使用?
答案 0 :(得分:3)
他们返回完全相同的东西 - android.support.v4.app.LoaderManager
。
从源代码:v4.app.Fragment
实际上正在回忆主持人活动:
public LoaderManager getLoaderManager() {
if (mLoaderManager != null) {
return mLoaderManager;
}
if (mActivity == null) {
throw new IllegalStateException(...);
}
mLoaderManager = mActivity.getLoaderManager(...);
return mLoaderManager;
}
您的活动可能会延长v4.app.FragmentActivity
,您可以看到getLoaderManager()
是getSupportLoaderManager()
同时调用的私有方法:
public LoaderManager getSupportLoaderManager() {
...
mLoaderManager = getLoaderManager(...);
return mLoaderManager;
}
所以:
v4.app.Fragment
,您需要子类v4.app.FragmentActivity
(AppCompatActivity
只是一个示例); v4.app.Fragment.getLoaderManager()
和v4.app.FragmentActivity.getSupportLoaderManager()
最终都会调用相同的方法v4.app.FragmentActivity.getLoaderManager()
。我很确定这两者之间没有任何区别。答案 1 :(得分:2)
如果你在(support.v4.app。)Fragment中使用Loader(例如你的listview在Fragment中,并且加载器回调设置为Fragment)你应该使用getLoaderManager()
的片段,而不是调用getActivity().getSupportLoaderManager()
。
接受的答案是正确的,两者返回相同的东西,但它们的副作用是不同的:当你使用片段的getLoaderManager()
时,片段的mLoaderManager
被设置为指向装载程序管理器返回。只有这样,支持库才会知道如何根据片段的生命周期来管理加载器管理器(进而管理加载器)。
当片段(但不是活动)被销毁时,如果您使用getLoaderManager()
的片段版本,则加载器将仅停止 。如果你这样做,加载器管理器/加载器将不知道片段被破坏,并且可以在加载完成时调用其回调来调用片段等。
所以你观察他们的行为方式应该是正确的。
答案 2 :(得分:-1)
这是reference。
他们会回报同样的事吗?
LoadManager的支持和不支持版本执行相同的操作,但它们不在同一个包中。基本上getLoaderManager()
是android.app.Fragment
的合作伙伴,而getSupportLoaderManager()
是android.support.v4.app.Fragment
的合作伙伴。您需要记住,支持库适用于11以下的Build SDK,因此您不能在低于SDK 11的情况下使用android.app.Fragment,但您可以在任何构建版本中使用支持库。
这是getLoadManager返回的内容我无法缩放图片
并且LoaderManagerImpl扩展了LoaderManager,它是支持库的一部分。