安卓 - Activity 和 FragmentActivity 有什么区别?

85

我是Android开发新手。我想要构建一个带有选项卡格式的应用程序。我发现许多文档都使用了Activity,也有许多情况下使用了FragmentActivity。我不确定该从哪个方面开始。请建议我在制作选项卡格式应用时,应该使用Activity还是FragmentActivity

3个回答

119

ianhanniballake是正确的。 您可以从FragmentActivity 中获得所有 Activity 的功能。事实上, FragmentActivity 有更多功能。

使用 FragmentActivity ,您可以轻松构建选项卡和切换格式。对于每个选项卡,您可以使用不同的 Fragment Fragments 可重复使用)。因此,对于任何 FragmentActivity ,您都可以重用相同的 Fragment

仍然可以像在下一页中列表一样使用 Activity 进行单页操作,以及编辑列表元素。

还要记得如果您使用 android.app.Fragment ,请使用 Activity ; 如果您使用 android.support.v4.app.Fragment ,请使用 FragmentActivity 。永远不要将 android.support.v4.app.Fragment 附加到 android.app.Activity ,否则会引发异常。


顺便说一下,我在这里找到了一些关于Android Fragment的好讨论Fragment trong Android,是另一种语言。 - UmbalaAZ
但是请注意@ianhanniballake的回答:除非针对API 11之前的API,否则您可以使用“Activity”而不是“FragmentActivity”,并仍然可以访问片段; 这个答案并没有完全说明这一点(尽管最后一段暗示了这一点)。 - ToolmakerSteve
正如我们所知,在我们的项目中通常有一个BaseActivity,而所有其他的活动都会继承它。但是当涉及到FragmentActivity时,我们无法这样做。因此,即使在选项卡的情况下,我也不使用FragmentActivity。 - Allen Vork

58

FragmentActivity提供了Activity的所有功能,并且能够使用Fragment(片段),在许多情况下特别有用,特别是在使用ActionBar(操作栏)时,这是在Android中使用选项卡的最佳方法。

如果你只需要支持Honeycomb(v11)或更高版本的设备,则可以使用Activity并使用在v11中引入的本机Fragments而没有问题。FragmentActivity是专门作为支持库的一部分构建的,以将一些有用的功能(如Fragments)向后端口到旧设备上。

我还应该指出,您可能会发现向后兼容性 - 实现选项卡培训对未来非常有帮助。


3
@A--C - 我已经编辑了我的回答 - 你是正确的,API 11+设备可以使用原生的Fragments和普通的Activity类。 - ianhanniballake
我将挑战这个说法,即在API11+中可以使用普通的Activity类作为Fragment。这似乎在KitKat中已经改变了。请参见https://android.googlesource.com/platform/frameworks/base.git/+/kitkat-mr1-release/core/java/android/app/Fragment.java#584 - cmarcelk
1
@cmarcelk - 不确定“普通的Activity类可以用作Fragment”是什么意思 - 我说过android.app.Activity可以与android.app.Fragment一起使用,但并没有提到它们可以互换。 - ianhanniballake
在API11+中,@cmarcelk可以访问片段; FragmentActivity不再需要。 Activity或FragmentActivity本身不是片段。 - ToolmakerSteve

3
如果您在最近的ADT包中使用Eclipse的“新Android项目”向导,将自动以Fragments的形式实现选项卡。这使得将您的应用程序转换为平板电脑格式变得更加容易。 对于简单的单屏布局,您仍然可以使用Activity。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接