zoukankan      html  css  js  c++  java
  • fragement生命周期

    转自http://www.cnblogs.com/mybkn/

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

    你从fragment添加到菜单的任何条目,都会出现在现有菜单项之后。Fragment之后可以通过方法onOptionsItemSelected()来响应自己的菜单项被选择的事件。

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

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

    处理fragement的生命周期

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

    Resumed:

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

    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的生命周期。

    协调与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的生命周期变化的。

  • 相关阅读:
    springmvc log4j 配置
    intellij idea maven springmvc 环境搭建
    spring,property not found on type
    intellij idea maven 工程生成可执行的jar
    device eth0 does not seem to be present, delaying initialization
    macos ssh host配置及免密登陆
    centos7 搭建 docker 环境
    通过rest接口获取自增id (twitter snowflake算法)
    微信小程序开发体验
    gitbook 制作 beego 参考手册
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/3462138.html
Copyright © 2011-2022 走看看