你好!
简介
Fragment,是Android 3.0(API 11)提出的,起初是为了解决Andorid 的碎片化,而其简称碎片。为了兼容低版本,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6。
过去support-v4库是一个jar包,24.2.0版本开始,将support-v4库模块化为多个jar包,包含:support-fragment, support-ui, support-media-compat等,这么做是为了减少APK包大小,你需要用哪个模块就引入哪个模块。
如果想引入整个support-v4库,则compile ‘com.android.support:support-v4:24.2.1’,如果只想引入support-fragment库,则com.android.support:support-fragment:24.2.1。
因为support库是不断更新的,因此建议使用support库中的android.support.v4.app.Fragment,而不要用系统自带的android.app.Fragment。而如果要使用support库的Fragment,Activity必须要继承FragmentActivity(AppCompatActivity是FragmentActivity的子类)。
Fragment官方的定义是:
Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section of an activity, which has its own lifecycle, receives its own input events, and which you can add or remove while the activity is running.
根据上面的定义可知:
- Fragment是依赖于Activity的,不能独立存在的。
- 一个Activity里可以有多个Fragment。
- 一个Fragment可以被多个Activity重用。
- Fragment有自己的生命周期,并能接收输入事件。
- 我们能在Activity运行时动态地添加或删除Fragment。
Android 3.0系统只针对平板电脑,且闭源,那时候针对手机和针对平板是两套源代码,后来Android
4.0时整合了手机和平板的源码,因此市面上很难看到Android 3.0系统。
优势
- 模块化(Modularity):我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。
- 可重用(Reusability):多个Activity可以重用一个Fragment。
- 可适配(Adaptability):根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,这样用户体验更好。
核心类
- Fragment:Fragment的基类,任何创建的Fragment都需要继承该类。
- FragmentManager:管理和维护Fragment。他是抽象类,具体的实现类是- FragmentManagerImpl。
- FragmentTransaction:对Fragment的添加、删除等操作都需要通过事务方式进行。他是抽象类,具体的实现类是BackStackRecord。
- Nested Fragment(Fragment内部嵌套Fragment的能力)是Android
4.2提出的,support-fragment库可以兼容到1.6。通过getChildFragmentManager()能够获得管理子Fragment的 - FragmentManager,在子Fragment中可以通过getParentFragment()获得父Fragment。
生命周期
Fragment的生命周期和Activity类似,但比Activity的生命周期复杂一些,基本的生命周期方法如下图:

解释如下:
- onAttach():Fragment和Activity相关联时调用。可以通过该方法获取
Activity引用,还可以通过getArguments()获取参数。 - onCreate():Fragment被创建时调用。
- onCreateView():创建Fragment的布局。
- onActivityCreated():当Activity完成onCreate()时调用。
- onStart():当Fragment可见时调用。
- onResume():当Fragment可见且可交互时调用。
- onPause():当Fragment不可交互但可见时调用。
- onStop():当Fragment不可见时调用。
- onDestroyView():当Fragment的UI从视图结构中移除时调用。
- onDestroy():销毁Fragment时调用。
- onDetach():当Fragment和Activity解除关联时调用。
上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。
因为Fragment是依赖Activity的,因此为了讲解Fragment的生命周期,需要和Activity的生命周期方法一起讲,即Fragment的各个生命周期方法和Activity的各个生命周期方法的关系和顺序,如图:

启动Fragment:onAttach()–>onCreate()–>onCreateView()–>onActivityCreated()–>onStart()–>onResume()
息屏状态:onPause()–>onStop()
重新点亮屏幕:onStart()–>onResume()
退出:onPause()–>onStop()–>onDestroyView()–>onDestroy()–>onDetach()
Fragment被回收又重新创建(横竖屏切换):被回收执行onPause()–>onSaveInstanceState()–>onStop()–>onDestroyView()–>onDestroy()–>onDetach(),重新创建执行onAttach()–>onCreate()–>onCreateView()–>onActivityCreated()–>onStart()–>onResume();
我是入梦,谢谢你的观看我的博客,如果有什么错误,请随时联系我,QQ:897589417

3450

被折叠的 条评论
为什么被折叠?



