Fragment使用及生命周期

本文详细介绍了Android中Fragment的生命周期,包括创建、可见性变化、后台模式转换及销毁等各个阶段,并解释了如何通过FragmentManager管理和FragmentTransaction操作Fragment。

 1.Fragment的生命周期

   每一个fragment 都有自己的一套生命周期回调方法和处理自己的用户输入事件,如下图

 

要创建一个fragment,必须创建一个fragment的子类(或是继承自它的子类)。fragment类的代码看起来很像activity。它与activity一样都有回调函数,例如onCreate(),onStart(),onPause(),和onStop()。事实上,如果你正在将一个现成的Android应用转而使用Fragment来实现,可以简单的将代码从activity的回调函数移植到各自的fragment回调函数中。

2.生命周期的分析

   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的大部分状态都和activity很相似,但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的生命周期变化的,Fragment参数传递通过Bundle对象。

3.FragmentManager的说明

  FragmentManager能够实现管理activity中fragment. 通过调用activity的getFragmentManager()取得它的实例.
FragmentManager可以做如下一些事情:
  3.1、使用findFragmentById() (用于在activity layout中提供一个UI的fragment)或findFragmentByTag()
   (适用于有或没有UI的fragment)获取activity中存在的fragment
  3.2、将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).
  3.3、使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.

4.FragmentTransaction

   FragmentTransaction对fragment进行添加,移除,替换,以及执行其他动作。从 FragmentManager 获得一个 FragmentTransaction的实例 :

   FragmentManager fragmentManager = getFragmentManager(); 

   FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

  每一个事务都是同时要执行的一套变化.可以在一个给定的事务中设置你想执行的所有变化,使用诸如 add(), remove(), 和 replace().然后, 要给activity应用事务, 必须调用 commit().
在调用commit()之前, 你可能想调用 addToBackStack(),将事务添加到一个fragment事务的back stack. 这个back stack由activity管理, 并允许用户通过按下 BACK 按键返回到前一个fragment状态.

5.继承系统内置Fragment派生的子类

    5.1: DialogFramgnet 进行创建对话框,完全可以用来替代AlertDialog ,注意Fragment加载布局布局,Parent view 如果是RelativeLayout,会距离屏幕左右有margin 值,想自己控制值,建议根视图使用LinerLayout,在构造实例方法设置  setStyle(STYLE_NO_FRAME, 0);对话框show出来之后,控制Back键监听操作

   this.getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
            //那个是onkey事件,点击一次,可分为两步,down和up,所以会走两次啊
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && event.getAction() == KeyEvent.ACTION_DOWN) {
                   //执行事件操作
         }
     }
}

  5.2 ListFragment   

    显示一个列表控件,就像ListActivity类,它提供了很多管理列表的方法,onListItemClick和setListAdapter等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值