安卓之Fragment

Fragment代表了Activity的子模块,因此可以理解为Activity片段。

Fragment必须被嵌入Activity中使用,因此,Fragment虽然有自己的生命周期,但是必须受它所在的Activity的生命周期的控制。例如,当Activity暂停时,该Activity内的所有的Fragment肯定是暂停的,当Activity被销毁时,所有的Fragment肯定会被销毁,只有当Activity处于活动状态,程序员才可以通过方法,独立的操作Fragment。

关于Fragment,可以归纳出如下特征。

>Fragment总是做为Activity界面的组成部分,可通过调用getActivity()方法获得它所在的Activity,Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法获得Fragment

>在Activity运行过程中,可以通过调用FragmentManager的add(),remove(),replace()方法动态的添加,删除或者替换Fragment

>一个Activity可以同时添加多个Fragment,同理,一个Fragment也可以同时被多个Activity使用

>Fragment可以相应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。

通常来说创建Fragment需要实现三种方法:

>onCreate():系统创建Fragment对象后回调该方法。实现代码中只初始化想要在Fragment保持的必要组件,当Fragment被暂停或者停止后可以恢复。

>onCreateView():当Fragment绘制界面组件时会回调此方法。该方法必须返回一个View,也正是Fragement所显示的View

>onPause();当用户离开该Fragment时需要回调该方法。


Fragment的生命周期图:


Fragment与Activity的生命周期图对比


生命周期分析

1. 当一个fragment被创建的时候,它会经历以下状态.

  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()

2. 当这个fragment对用户可见的时候,它会经历以下状态。

  • onStart()
  • onResume()

3. 当这个fragment进入“后台模式”的时候,它会经历以下状态。

  • onPause()
  • onStop()

4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。

  • onPause()
  • onStop()
  • onDestroyView()
  • onDestroy() // 本来漏掉类这个回调,感谢xiangxue336提出。
  • onDetach()

5. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。

  • onCreate()
  • onCreateView()
  • onActivityCreated()

6. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。

  • onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
  • onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
  • onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
  • onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
  • onDetach() —— 当fragment和activity分离的时候,调用这个方法。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值