我的问题除了明显的继承差异外,Fragment
和FragmentActivity
之间的主要区别是什么?每个班级最适合哪些场景?我试图理解为什么这两个类都存在......
答案 0 :(得分:272)
Fragment
是Activity
的一部分,其中包含:
Activity
运行时添加或删除。
Fragment
必须始终嵌入Activity
。
Fragments
不属于HoneyComb(3.0)之前的API。如果您想在针对HoneyComb之前的平台版本的应用中使用Fragments
,则需要将Support Package添加到您的项目中,并使用FragmentActivity
来保留您的Fragments
。 FragmentActivity
类具有用于处理Fragments
的API,而在HoneyComb之前的Activity
类则没有。Activity
类。
如果您的项目仅定位到HoneyComb或更新版本,则应使用FragmentActivity
而不是Fragments
来保留android.app.Fragment
。
一些细节:
将Activity
与android.support.v4.app.Fragment
一起使用。将FragmentActivity
与Fragment
一起使用。不要将支持包Activity
添加到FragmentManager
,因为它会导致抛出异常。
要注意的事项:LoaderManager
和Fragment
对FragmentActivity有单独的支持版本:
如果您在Activity
(HoneyComb及以上版本)中使用getFragmentManager()
,请致电
android.app.FragmentManager
获取getLoaderManager()
android.app.LoaderManager
获取Fragment
如果您在FragmentActivity
(蜜蜂预售前)中使用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
,但它不必是{{1}}布局的一部分。它可以用作活动的隐形工作者,没有自己的UI。
答案 1 :(得分:14)
FragmentActivity是我们经典的具有片段支持的Activity,仅此而已。因此,当Fragment将附加到Activity时,需要FragmentActivity。
Well Fragment是复制Activity基本行为的好组件,仍然不是像Activity这样的独立应用程序组件,需要附加到Activity才能工作。
查看here了解更多详情
答案 2 :(得分:8)
将FragmentActivity视为可以支持Fragments的常规Activity类。在蜂窝之前,活动类不能直接使用片段,因此在使用片段的活动中需要这样做。
如果你的目标发行版是Honeycomb,那么你可以延伸到Activity。
此外,片段也被视为“子活动”。没有活动就不可能存在。总是将片段视为子活动,你应该做得很好。因此,活动将是父类,而片段是子类的符号关系。
答案 3 :(得分:1)
FragmentActivity是一个包含Fragment的临时活动。 在这几句话中我已经解释了一个主要的重要变化,用android 3.0(HoneyComb),android团队已经插入了android sdk。
通过这些新概念,您的代码和布局变得更加灵活和可维护。如果你在谷歌搜索有很多例子。