片段与片段活动的区别
我的问题是除了明显的遗传差异之外, Fragment
和FragmentActivity
之间的主要区别是什么? 每个课程最适合哪种情况? 我想了解为什么这两个类都存在…
Fragment
是一个Activity
,它有:
- 它自己的生命周期
- 收到自己的input事件
- 可以在
Activity
运行时添加或删除。
Fragment
必须始终embedded到Activity
。
HoneyComb(3.0)之前, Fragments
不是API的一部分。 如果您希望在应用程序中使用Fragments
,并将其定位到HoneyComb之前的平台版本,则需要将支持包添加到您的项目中,并使用FragmentActivity
来保存您的Fragments
。 FragmentActivity
类具有用于处理Fragments
的API,而在HoneyComb之前的Activity
类没有。
如果您的项目只针对HoneyComb或更新,您应该使用Activity
而不是FragmentActivity
来保存您的Fragments
。
一些细节:
在Activity
使用android.app.Fragment
。 使用android.support.v4.app.Fragment
和FragmentActivity
。 不要将支持包Fragment
添加到Activity
因为这会导致抛出exception。
一个要小心的事情: FragmentManager
和LoaderManager
有单独的支持版本的FragmentActivity:
如果您在Activity
中使用Fragment
(HoneyComb或更高版本),请致电
-
getFragmentManager()
获取android.app.FragmentManager
-
getLoaderManager()
获取android.app.LoaderManager
如果您在FragmentActivity
(Pre-HoneyComb)中使用Fragment
,请调用:
-
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()
同样有用的是,虽然一个片段必须embedded到一个Activity
但它不一定是Activity
布局的一部分。 它可以用作活动的隐形工作者,而不需要自己的用户界面。
FragmentActivity是我们经典的支持片段的Activity,仅此而已。 因此,当片段将被附加到活动时,需要FragmentActivity。
Well Fragment是复制Activity的基本行为的好组件,仍然不是像Activity这样的独立应用程序组件,需要附加到Activity才能正常工作。
在这里寻找更多的细节
把FragmentActivity想象成一个可以支持碎片的常规Activity类。 在蜂窝之前,一个activity类不能直接使用Fragments,所以这在使用Fragments的活动中是需要的。
如果你的目标分布是Honeycomb,那么你可以扩展掉Activity。
另外一个片段被认为是一个“子活动”。 没有活动就不能存在。 总是把一个片段想象成一个子活动,你应该是好的。 所以活动将是父母和片段(s)孩子的象征关系。
FragmentActivity是一个包含Fragment的特别活动。 在这几句话中我已经解释了一个主要的重要变化,那就是用android 3.0(HoneyComb),android团队已经在android sdk中插入了。
有了这些新的概念,您的代码和布局变得更加灵活和可维护。 如果你在谷歌search有很多的例子。