Fragment
原文
A Fragment is a piece of an application's user interface or behavior
* that can be placed in an {@link Activity}. Interaction with fragments
* is done through {@link FragmentManager}, which can be obtained via
* {@link Activity#getFragmentManager() Activity.getFragmentManager()} and
* {@link Fragment#getFragmentManager() Fragment.getFragmentManager()}.
* etc
释义
概括
Fragment可看作为应用操作界面的一块或者是可以放置在Activity之中的部分。可以通过FragmentManager来完成与Fragment的交互,可以通过Activity.getFragmentManager或者Fragment.getFragmentManager接口获取FragmentManage的实例。
Fragment类可被实现成各种各样的结果。它最核心的功能,它能够在大屏的Activity的一部分中运行特殊操作或者交互界面。Fragment是和所处的Activity紧密联系在一起的,并且是不能自己独立运作使用的。尽管Fragment拥有自己独立的生命周期,但是这些生命周期是完全依赖于所在Activity的生命周期的:如果Activity的生命周期是stopped,Activity包含的fragment没有一个可以处在started状态(被启动);当activity被销毁,activity中的Fragment都会被销毁。
所有的Fragment的子类必须包含一个无参的构造函数。系统Framework层在需要的时候会经常重新实例化Fragment,特别是在状态恢复的时候,需要能够找到这个无参的构造函数来实例化。如果无参构造函数不可用,当需要状态恢复某些情况下会发生运行时异常。
下面我们将从下面几个方面讨论:
- 老的版本(Old Platform)
- 生命周期(Lifecycle)
- 布局(Layout)
- 后台栈(Back Stack)
老的版本
当Fragment被安卓3.0版本推出,更早版本的系统同样可以通过support包实现。更多细节可以查看相关博客。
生命周期
尽管fragment的生命周期与activity的生命周期是紧密关联的,但是fragment在activity的标准生命周期下也是拥有自己的一些不同的生命周期。它包含像onResume这样的activity的基础的生命周期,但是那些与用户和activity进行交互的方法同样非常重要。
将Fragment带到resumed状态(可与用户进行交互)的一系列核心生命周期如下:
- onAttach:在fragment与activity关联的时候被调用
- onCreate:创建Fragment的时候被调用,用来做初始化工作的
- onCreateView:创建并返回与Fragment关联的View
- onActivityCreated:通知fragment它所在的activity完成了onCreate
- onViewStateRestored:通知Fragment之前保存的视图层级的状态都被恢复了
- onStart:使fragment被用户可见(基于所在的activity的状态是start)
- onResume:使fragment可与用户进行交互(基于所在的activity是resume状态)
当fragment再也不被使用了,将经历下面的一系列方法:
- onPause:fragment不再和用户进行交互了因为所在的activity是onPause状态或者调用fragement的操作去修改
- onStop:fragment不可见,原因同上
- onDestroyView:允许fragment清理view相关联的资源
- onDestroy:让fragment通过这个方法做最后的清理工作
- onDetach:当fragment与activity不再关联的时候会被立即调用
布局
fragment可被直接当做应用的一个布局使用,为了让你的的代码更好的支持模块化,为了让你更容易适配不同的设备屏幕。
例子此处省略。
后台栈
fragment的事物调度是activity内部的后台栈去维护的。当用户按返回键的时候,在activity被finish前,任何后台栈里的事物都会先被弹出。
例子此处省略