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

被折叠的 条评论
为什么被折叠?



