Fragment与FragmentActivity的关系
前阵用viewpaper+fragment做滑动引导,查阅了下网上的资料,发现在有两种做法,一个是自建类直接继承Activity另一种是继承FragmentActivity,很是迷惑,在查了些google的官方文档和StackOverflow之后有了些理解,在此坐下记录。下面的英文说明取自Stackoverflow,个人感觉解释的很清楚。
A
Fragmentis a section of anActivity, which has:
- its own lifecycle
- receives its own input events
- can be added or removed while the
Activityis running.A
Fragmentmust always be embedded in anActivity.
Fragmentsare not part of the API prior to HoneyComb (3.0). If you want to useFragmentsin an app targeting a platform version prior to HoneyComb, you need to add the Support Package to your project and use theFragmentActivityto hold yourFragments. TheFragmentActivityclass has an API for dealing withFragments, whereas theActivityclass, prior to HoneyComb, doesn't.If your project is targeting HoneyComb or newer only, you should use
Activityand notFragmentActivityto hold yourFragments.Some details:
Use
android.app.FragmentwithActivity. Useandroid.support.v4.app.FragmentwithFragmentActivity. Don't add the support packageFragmentto anActivityas it will cause an Exception to be thrown.A thing to be careful with:
FragmentManagerandLoaderManagerhave separate support versions for FragmentActivity:If you are using a
Fragmentin anActivity(HoneyComb and up), call
getFragmentManager()to getandroid.app.FragmentManagergetLoaderManager()to getandroid.app.LoaderManagerif you are using a
Fragmentin aFragmentActivity(pre-HoneyComb), call:
getSupportFragmentManager()to getandroid.support.v4.app.FragmentManager.getSupportLoaderManager()to getandroid.support.v4.app.LoaderManagerso, dont do
myFragmentActivity.getLoaderManager()//don't do this, do myFragmentActivity.getSupportLoaderManager()or
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()//don't do this, do android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()Also useful to know is that while a fragment has to be embedded in an
Activityit doesn't have to be part of theActivitylayout. It can be used as an invisible worker for the activity, with no UI of its own.
总结来说就是标红记录的说明:
1、fragmentactivity 继承自activity,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入support包,同时继承fragmentActivity,这样在activity中就能嵌入fragment来实现你想要的布局效果。
2、当然3.0之后你就可以直接继承自Activity,并且在其中嵌入使用fragment了。
3、获得Manager的方式也不同
3.0以下:getSupportFragmentManager()
3.0以上:getFragmentManager()

浙公网安备 33010602011771号