fragment 作为附着在活动(Activity)中的UI片段,在应用过程中非常重要。在使用过程中,注意以下几点:
附着的目标Activity需要继承Fragmentactivity,否则无法使用fragment;
要使用fragment 需要使用FragmentManager,要获取FragmentManager 需要在activity中调用 getFragmentManager;
在activity中使用fragment的好处是可以对fragment进行添加移除和替换;提交的一组fragment的变化作为一个事务,事务通过
FragmentTransaction来执行。还可以把fragment保存在activity的后退栈中,这样就可以让用户在fragment变化之间导航。
可以通过 FragmentManager来取得FragmentTracnaction的实例:
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
一个事务在同一时刻执行一组动作,可以用add,replace,remove等方法构成事务,然后commit提交 事务
在commit提交之前,可以使用addToBackStack()把事务条件到一个后退栈中,这个回退栈属于所有activity,有了它,当被覆盖的fragment不会直接进入销毁状态;
下面是关于fragment的一个实例,其中关于fragment事务的代码如下:
private void FragentOper() {
// TODO Auto-generated method stub
fm = getSupportFragmentManager();
FragmentTransaction trans = fm.beginTransaction();
trans.addToBackStack(null);
trans.add(R.id.actmain_framelayout, f1).commit();
}
关于fragment变化的代码如下:
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.actmain_l1:
fm.beginTransaction().replace(R.id.actmain_framelayout, f1).commit();
// fm.beginTransaction().hide(f2).hide(f3).hide(f4).show(f1).commit();
break;
case R.id.actmain_l2:
fm.beginTransaction().replace(R.id.actmain_framelayout, f2).commit();
// fm.beginTransaction().hide(f1).hide(f3).hide(f4).show(f2).commit();
break;
case R.id.actmain_l3:
fm.beginTransaction().replace(R.id.actmain_framelayout, f3).commit();
// fm.beginTransaction().hide(f1).hide(f2).hide(f4).show(f3).commit();
break;
case R.id.actmain_l4:
fm.beginTransaction().replace(R.id.actmain_framelayout, f4).commit();
// fm.beginTransaction().hide(f1).hide(f2).hide(f3).show(f4).commit();
break;
default:
break;
}
}
该情况下 fragment启动运行时的生命周期是:
onAttach >onCreate>onCreateView>onActivityCreated>onStart>onResume 此时fragment 已激活,能参与事务变化;
当该fragment被其他fragment取代时 发生的生命周期是:
onPause>onStop>ondestroyView>
如果没有调用trans.addToBackStack(null);
则会fragment被替代时会直接 进入ondestroy销毁状态,