绝密Fragment 的生命周期及使用方法详解Android工程师
一.概述:
1.Fragment 是 activity 的界面中的一部分或一种行为。可以把多个 Fragment 组合到一个 activity 中来创建一 个多面界面并且可以在多个 activity 中重用一个 Fragment。可以把 Fragment 认为模块化的一段 activity,它具 有自己的生命周期,接收它自己的事件,并可以在 activity 运行时被添加或删除。
2.Fragment 不能独立存在,它必须嵌入到 activity 中,而且 Fragment 的生命周期直接受所在的 activity 的影 响。例如:当 activity 暂停时,它拥有的所有的 Fragment 都暂停了,当 activity 销毁时,它拥有的所有 Fragment 都被销毁。然而,当 activity 运行时(在 onResume()之后,onPause()之前),可以单独地操作每个 Fragment, 比如添加或删除它们。当在执行上述针对 Fragment 的事务时,可以将事务添加到一个栈中,这个栈被 activity 管 理,栈中的每一条都是一个 Fragment 的一次事务。有了这个栈,就可以反向执行 Fragment 的事务,这样就可以在 Fragment 级支持“返回”键(向后导航)。
3.当向 activity 中添加一个 Fragment 时,它须置于 ViewGroup 控件中,并且需定义 Fragment 自己的界面。可 以在 layoutxml 文件中声明 Fragment,元素为:<fragment>;也可以在代码中创建 Fragment,然后把它加入到 ViewGroup 控件中。然而,Fragment 不一定非要放在 activity 的界面中,它可以隐藏在后台为 actvitiy 工作。
二.生命周期:
1.onCreate():
当创建 fragment 时系统调用此方法。在其中必须初始化 fragment 的基础组件们。可参考 activity 的说明。
2.onCreateView():
系统在 fragment 要画自己的界面时调用(在真正显示之前)此方法。这个方法必须返回 frament 的 layout 的根控 件。如果这个 fragment 不提供界面,那它应返回 null。
3.onPause():
大多数程序应最少对 fragment 实现这三个方法。当然还有其它几个回调方法可应该按情况实现之。所有的生命周 期回调函数在“操控 fragment 的生命周期”一节中有详细讨论。
三.创建 Fragmet:
要创建 fragment,必须从 Fragment 或 Fragment 的派生类派生出一个类。Fragment 的代码写起来有些像 activity。它 具有跟 activity 一样的回调方法,比如 onCreate(),onStart(),onPause()和 onStop()。实际上,如果想把老的程序改为使 用 fragment,基本上只需要把 activity 的回调方法的代码移到 fragment 中对应的方法即可。
1.添加有界面的 Fragment:
Fragment 一般作为 activity 的用户界面的一部分,把它自己的 layout 嵌入到 activity 的 layout 中。一个要为 fragment 提供 layout,必须实现 onCreateView()回调方法,然后在这个方法中返回一个 View 对象,这个对象是 fragment 的 layout 的根。
2.添加没有界面的 Fragment:
要添加一个没有界面的 fragment,需在 activity 中调用方法 add(Fragment,String)(它支持用一个唯 一的字符串做为 fragment 的“tag”,而不是 viewID)。这样添加的 fragment 由于没有界面,所以在实现它时不需 调用实现 onCreateView()方法。使用 tag 字符串来标识一个 fragment 并不是只能用于没有界面的 fragment 上,也可以把它用于有界面的 fragment 上,但是,如果一个 fragment 没有界面,tag 字符串将成为它唯一的选择。获取以 tag 标识的 fragment,需使用方法 findFragmentByTab()。
四.Frament 管理:
要管理 fragment,需使用 FragmentManager,要获取它,需在 activity 中调用方法 getFragmentManager()。 可以用 FragmentManager 来做以上事情:
a.使用方法 findFragmentById()或 findFragmentByTag(),获取 activity 中已存在的 fragment:
b.使用方法 popBackStack()从 activity 的后退栈中弹出 fragment(这可以模拟后退键引发的动作):
c.使用方法 addOnBackStackChangedListerner()注册一个侦听器以监视后退栈的变化:
d.使用FragmentManager 打开一个 FragmentTransaction 来执行 fragment 的事务:
比如添加或删除 fragment。在 activity 中使用 fragment 的一个伟大的好处是能跟据用户的输入对 fragment 进行添加、删除、替换以及执行 其它动作的能力。提交的一组 fragment 的变化叫做一个事务。事务通过 FragmentTransaction 来执行。还可以把每个 事务保存在 activity 的后退栈中,这样就可以让用户在 fragment 变化之间导航(跟在 activity 之间导航一样)。可以通过 FragmentManager 来取得。FragmentTransaction 的实例,如下:
FragmentManagerfragmentManager = getFragmentManager();
FragmentTransactionfragmentTransaction =fragmentManager.beginTransaction();
一个事务是在同一时刻执行的一组动作(很像数据库中的事务)。可以用 add(),remove(),replace()等方法构成事务,最后使用 commit()方法提交事务。在调用 commint()之前,可以用 addToBackStack()把事务添加到一个后退栈中, 这个后退栈属于所在的 activity。有了它,就可以在用户按下返回键时,返回到 fragment 执行事务之前的状态。如 下例:演示了如何用一个 fragment 代替另一个 fragment,同时在后退栈中保存被代替的 fragment 的状态。


1914篇文章