对Frangment的理解

Frangment允许将Activity拆分成多个完全独立的封装的可重用的组件,每个组件有它自己的生命周期和UI布局。

他和Activity很像,但是和Activity不同的是Frangment应该属于Activity,而不能单独存在,它必须嵌入到activity中,

而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,他拥有的所有的Fragment都暂停了,

当activity销毁时,他拥有的所有Fragment都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),

可以单独地操作每个Fragment,比如添加或删除它们。当中执行上述针对Fragment的事务时,可以将事务添加到一个栈中,

这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,

这样就可以在Fragment级支持“返回”键(向后导航)。

        当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。

可以在layout.xml布局文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到

ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为activity工作。

onCreate():

     当创建fragment时系统调用此方法。在其中必须初始化fragment的基础组件们。可参考activity的说明;


onCreateView():

     系统在fragment要画自己的界面时调用(在真正显示之前)此方法,这个方法必须返回fragment的layout的根控

件,如果这个fragment不提供界面,那它应返回null;


onPause():

     大多数程序应最少对fragment实现这三个方法,当然还有其它几个回调方法可应该按情况实现之,所有的声明周期

回调函数在“操控fragment的生命周期”一节中有详细讨论。


下图为fragment的生命周期(它所在的activity处于运行状态)



 Activity和Fragment生命周期对比图如下:


两个的生命周期很类似,也息息相关

Frangment Mangment的使用

添加Frangment 

Fragment f=new testFragment(position+1);
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.remove(R.id.fragment_home,f);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);
        ft.commit();

R.id.fragment_home是XML文件中Fragment组件的id;

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);用来设置默认的过度动画;

<fragment>中声明一个fragment。当系统创建上例中的layout时,它实例化每一个fragment,然后调

用它们的onCreateView()方法,以获取每个fragment的layout。系统把fragment返回的view对象插入到<fragment>元

素的位置,直接代替<fragment>元素。

注:每个fragment都需要提供一个ID,系统在activity重新创建时用它来恢复fragment,也可以用它来操作fragment进

行其它的事物,比如删除它。有三种方法给fragment提供ID:

  <1> 为Android:id属性赋一个数字;

  <2> 为Android:tag属性赋一个字符串。

如果没有使用上述任何一种方法,系统将使用fragment的容器的ID。


<fragment>中声明一个fragment。当系统创建上例中的layout时,它实例化每一个fragment,然后调

用它们的onCreateView()方法,以获取每个fragment的layout。系统把fragment返回的view对象插入到<fragment>元

素的位置,直接代替<fragment>元素。


Fragment管理

      要管理fragment,需使用FragmentManager,要获取它,需在activity中调用方法getFragmentManager()。

可以用FragmentManager来做以下事情:

      <1> 使用方法findFragmentById()或findFragmentByTag(),获取activity中已存在的fragment;

      <2> 使用方法popBackStack()从activity的后退栈中弹出fragment(这可以模拟后退键引发的动作),用方法addOnBackStackChangedListenner()注册一个侦听器以监视后退栈的变化;

      <3> 还可以使用FragmentManager打开一个FragmentTransaction来执行fragment的事务,比如添加或删除fragment。

       在activity中使用fragment的一个伟大的好处是能根据用户的输入对fragment进行添加、删除、替换以及执行其他

动作的能力。提交的一组fragment的变化叫做一个事务。事务通过FragmentTransaction来执行。还可以把每个事务保

存在activity的后退栈中,这样就可以让用户在fragment变化之间导航(跟在activity之间导航一样)。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值