Fragment和FragmentActivity有什么区别?


Answers:


280

A Fragment是的一部分Activity,其中具有:

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

一个Fragment必须始终嵌入Activity

Fragments不是HoneyComb(3.0)之前的API的一部分。如果要Fragments在HoneyComb之前的平台版本的应用程序中使用,则需要将Support Package添加到项目中并使用FragmentActivity来保存您的Fragments。本FragmentActivity类有处理的API Fragments,而Activity类,前蜂窝,其实不然。

如果您的项目仅针对HoneyComb或更高版本,则应使用Activity而不是FragmentActivity保留Fragments

一些细节:

android.app.Fragment与一起使用Activityandroid.support.v4.app.Fragment与一起使用FragmentActivity。不要将支持包添加Fragment到中,Activity因为它会引发异常。

需要注意的一点:FragmentManagerLoaderManager为FragmentActivity提供单独的支持版本:

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

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

如果您FragmentFragmentActivity(HoneyComb之前)中使用,请致电:

  • 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。


6
但是,片段不是活动布局的一部分;您也可以将没有自己的UI的片段用作活动的不可见工作者。
uzay95

1
@ uzay95感谢您指出这一点。我在最后添加了一个部分来提及它。
Gunnar Karlsson 2013年

@GunnarKarlsson我们应该向fragmentActivity添加片段吗?
Dhasneem

2
@Dhasneem如果您希望您的应用程序在低于3.0的Android版本上运行,则可以向FragmentActivity添加一个Fragment。否则,您将片段添加到活动中。
Gunnar Karlsson,

2
谢谢!这解决了我的问题!现在,我知道为什么我的应用程序(用Activity编写)总是在添加Facebook登录按钮(在示例中使用android.support.v4.app.Fragment)后在onCreate时崩溃。当然,崩溃还有其他原因。但是您的答案是将它们组合在一起的最后一步。
2014年

14

FragmentActivity是我们经典的Activity,具有片段支持,仅此而已。因此,将Fragment附加到Activity时,需要FragmentActivity。

Well Fragment是复制Activity基本行为的好组件,仍然不是像Activity这样的独立应用程序组件,需要将其附加到Activity才能正常工作。

这里了解更多详情


1
顺便说一句,出过期的答案,只适用于那些希望工作的设备比API 11.旧版本的应用
ToolmakerSteve

@ToolmakerSteve您可以提供更多详细信息吗?如果可能,您可以使用最新版本来编辑答案吗?
格克汗阿克尔巴里斯

8

将FragmentActivity视为可以支持Fragments的常规Activity类。在蜂窝之前,活动类不能直接支持片段,因此在使用片段的活动中需要此功能。

如果您的目标发行版是Honeycomb,则可以扩展到Activity之外。

片段也被视为“子活动”。没有活动就不可能存在。始终将片段视为子活动,您应该会很好。因此,活动将是父级,而碎片是子级的符号关系。


1

FragmentActivity是包含Fragment的临时活动。在这几句话中,我向您解释了其中一项重要的重要更改,在android 3.0(HoneyComb)中,android team已插入android sdk。

有了这些新概念,您的代码和布局片段将变得更加灵活和可维护。如果您在Google上搜索,则有很多示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.