get4o.Man.Fragment中getLoaderManger()和getActivity()。getSupportLoaderManager()之间的区别

时间:2015-06-27 11:51:02

标签: android

来自getLoaderManager()的{​​p> android.support.v4.app.Fragment和来自getSupportLoaderManager()的{​​{1}}

他们会回归同样的事吗?我在文档中找不到它。如果没有,哪一个应该与片段内的支持库一起使用?

3 个答案:

答案 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.FragmentActivityAppCompatActivity只是一个示例);
  • 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返回的内容我无法缩放图片 enter image description here

并且LoaderManagerImpl扩展了LoaderManager,它是支持库的一部分。

enter image description here