162

我的问题是除了明显的继承差异之外,Fragment和之间的主要区别是FragmentActivity什么?每个类最适合哪些场景?我试图了解为什么这两个类都存在......

4

4 回答 4

285

AFragment是 a 的一部分Activity,它具有:

  • 自己的生命周期
  • 接收自己的输入事件
  • 可以在Activity运行时添加或删除。

AFragment必须始终嵌入到Activity.

Fragments在 HoneyComb (3.0) 之前不是 API 的一部分。如果您想Fragments在针对 HoneyComb 之前的平台版本的应用程序中使用,您需要将支持包FragmentActivity添加到您的项目并使用Fragments. 该类FragmentActivity有一个处理 的 API Fragments,而ActivityHoneyComb 之前的类没有。

如果您的项目仅针对 HoneyComb 或更新版本,您应该使用Activity而不是FragmentActivity持有您的Fragments.

一些细节:

android.app.Fragment与 一起使用Activityandroid.support.v4.app.Fragment与 一起使用FragmentActivity。不要将支持包添加Fragment到 anActivity中,因为它会导致抛出异常。

需要注意的一点:FragmentManager并且LoaderManager对 FragmentActivity 有单独的支持版本:

如果您FragmentActivity(HoneyComb 及以上)中使用 a,请致电

  • getFragmentManager()要得到android.app.FragmentManager
  • getLoaderManager()要得到android.app.LoaderManager

如果您FragmentFragmentActivity(pre-HoneyComb) 中使用 a,请致电:

  • getSupportFragmentManager()得到android.support.v4.app.FragmentManager.
  • getSupportLoaderManager()要得到android.support.v4.app.LoaderManager

所以,要这样做

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

或者

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

同样有用的是,虽然必须将片段嵌入到其中,Activity但它不必是Activity布局的一部分。它可以用作活动的隐形工作者,没有自己的 UI。

于 2012-05-15T22:42:48.240 回答
14

FragmentActivity 是我们的经典 Activity,支持 Fragment,仅此而已。因此需要 FragmentActivity,当一个 Fragment 将附加到 Activity 时。

那么 Fragment 是一个很好的组件,它复制了 Activity 的基本行为,仍然不是像 Activity 那样的独立应用程序组件,需要附加到 Activity 才能工作。

这里了解更多详情

于 2012-05-15T21:56:56.273 回答
8

将 FragmentActivity 视为可以支持 Fragments 的常规 Activity 类。在honeycomb 之前,活动类不能直接支持Fragment,因此在使用Fragment 的活动中需要这样做。

如果您的目标分布是 Honeycomb 及以上,则可以改为扩展 Activity。

片段也被视为“子活动”。它不能没有活动而存在。始终将片段视为子活动,您应该做得很好。因此,活动将是父级,片段是子级的象征关系。

于 2013-02-15T19:30:43.707 回答
1

FragmentActivity 是一个包含 Fragment 的临时活动。在这几句话中,我向您解释了在 android 3.0(HoneyComb) 中,android 团队在 android sdk 中插入的主要重要变化之一。

有了这些新概念,您的代码和布局变得更加灵活和可维护。如果你在谷歌上搜索有很多例子。

于 2012-05-15T22:09:38.960 回答