Activity和FragmentActivity的区别

248
我正在处理碎片,遇到了两个东西ActivityFragmentActivity,它们都被多次使用。我想知道这两者之间是否有任何区别,因为当我用FragmentActivity替换Activity时,应用程序没有发生任何变化。
2个回答

338

FragmentActivityActivity的子类,专为Android支持库而设计。

FragmentActivity类添加了一些新方法,以确保与旧版本的Android兼容,但除此之外,它们之间实际上没有太大的区别。只需确保将所有对getLoaderManager()getFragmentManager()的调用更改为相应的getSupportLoaderManager()getSupportFragmentManager()即可。


4
嘿,我没有改变调用 getSupportLoaderManager() 和 getSupportFragmentManager() 的部分...但它仍然正常工作。 - Rookie
33
这就是使它如此危险的原因 :P。FragmentActivity 继承了 Activity 类的 getLoaderManagergetFragmentManager 方法,因此编译器不会抱怨。很有可能您正在导入错误的 LoaderManagerFragmentManager 类。请确保您从支持包(android.support.v4.app)导入这些类,而不是 Android SDK (android.app)。 - Alex Lockwood
1
我们可以说,如果我们想在Android 2.x版本中使用片段,我们需要使用FragmentActivity,而对于支持片段的版本,我们需要使用Activity。 - Rookie
60
我认为你所说的是正确的。但是为了100%的清晰度...如果你使用android.app.Fragment,请使用Activity;如果你使用android.support.v4.app.Fragment,请使用FragmentActivity。永远不要将android.support.v4.app.Fragment附加到android.app.Activity上,否则会抛出异常。 - Alex Lockwood
14
首先尝试一下这个教程(如何在应用程序中使用Fragments)。然后,继续阅读这个教程(如何利用支持包中的Fragment)。开发者网站上的文档也值得一读。 - Alex Lockwood
显示剩余3条评论

8

FragmentActivity支持库的一部分,而Activity是框架的默认类。它们在功能上是等效的。

您应该始终使用FragmentActivityandroid.support.v4.app.Fragment而不是平台默认的Activityandroid.app.Fragment类。使用平台默认值意味着您依赖于在您运行设备上使用的片段实现。这些通常是多年前的版本,并包含已在支持库中修复的错误。


2
注意:自版本26.x.x起,支持库的minSdkVersion为14。 - Eugen Pechanec

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