android Fragments详解六:处理fragement的生命周期

把条目添加到动做栏

你的fragment们能够向activity的菜单(按Manu键时出现的东西)添加项,同时也可向动做栏(界面中顶部的那个区域)添加条目,这都需经过实现方法onCreateOptionManu()来完成。 html

你从fragment添加到菜单的任何条目,都会出如今现有菜单项以后。Fragment以后能够经过方法onOptionsItemSelected()来响应本身的菜单项被选择的事件。 android

你也能够在fragemnt中注册一个view来提供快捷菜单(上下文菜单)。当用户要打开快捷菜单时,fragmentonCreateContextMenu()方法会被调用。当用户选择其中一项时,fragemntonContextItemSelected()方法会被调用。 ide

注:尽管你的fragment能够分别收到它所添加的菜单项的选中事件,可是activity才是第一个接收这些事件的家伙,只有当activity对某个事件置之不理时,fragment才能接收到这个事件,对于菜单和快捷菜单都是这样。 ui


处理fragement的生命周期

管理fragment的生命周期有些像管理activity的生命周期。Fragment能够生存在三种状态: spa

Resumed: component

Fragment在一个运行中的activity中而且可见。 htm

Paused: 生命周期

另外一个activity处于最顶层,可是fragment所在的activity并无被彻底覆盖(顶层的activity是半透明的或不占据整个屏幕)。 事件

Stoped: 内存

Fragment不可见。多是它所在的activity处于stoped状态或是fragment被删除并添加到后退栈中了。此状态的fragment仍然存在于内存中。

一样相似于activity,你能够把fragment的状态保存在一个Bundle中,在activityrecreated时就需用到这个东西。你能够在onSaveInstanceState()方法中保存状态并在onCreate()onCreateView()onActivityCreated()中恢复,关于更多的保存状态的信息,请参考Activitys章节。

FragmentActivity的生命周期中最大的不一样就是存储到后退栈中的过程。Activity是在中止时自动被系统压入中止栈,而且这个栈是被系统管理的;而fragment是被压入activity所管理的一个后退栈,而且只有你在删除fragment后并明确调用addToBackStack()方法时才被压入。

然而,管理fragment的生命周期与管理activity的生命周期极其类似。你所须要去思考的是activity的生命周期如何影响fragment的生命周期。

http://developer.android.com/guide/components/fragments.html






协调与 activity生命周期的关系

Activity直接影响它所包含的fragment的生命周期,因此对activity的某个生命周期方法的调用也会产生对fragment相同方法的调用。例如:当activityonPause()方法被调用时,它所包含的全部的fragment们的onPause()方法都会被调用。

Fragmentactivity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,以下:

onAttach()

fragment被加入到activity时调用(在这个方法中能够得到所在的activity)。

onCreateView()

activity要获得fragmentlayout时,调用此方法,fragment在其中建立本身的layout(界面)

onActivityCreated()

activityonCreated()方法返回后调用此方法。

onDestroyView()

fragmentlayout被销毁时被调用。

onDetach()

fragment被从activity中删掉时被调用。

一旦activity进入resumed状态(也就是running状态),你就能够自由地添加和删除fragment了。所以,只有当activityresumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

相关文章
相关标签/搜索