Fragment

来源:互联网 发布:js循环table tr 编辑:程序博客网 时间:2024/06/17 03:22


一,概述

        为了支持动态的或者是多个页面同时显示,android提供了fragment组件;

        如果应用最小支持的sdk为11以上,则可以直接使用系统类库,否则要使用 Support Library


二,创建一个fragment

        继承于Fragment类,必须要提供onCreateView回调提供Fragment的视图;

        每个Fragment类似于Activity,都会有自己的生命周期,其中部分的回调受所在的Activity控制,比如Activity调用onPause()会导致它所有的Fragment调用onPause()

    

三,使用xml在Activity中添加Fragment

        1,在xml中添加的fragment无法动态添加和移除,所以必须在代码中动态添加或者移除

         2,使用FragmentActivity代替Activity


四,动态使用Fragment

        1,FragmentActivity必须有root view

              

FrameLayout rootView = new FrameLayout(this);rootView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));rootView.setId(android.R.id.primary);

      2,在FragmentActivity   onCreate中添加最初始的Fragment


     3,FragmentManager

         The FragmentManager class provides methods that allow you to add, remove, and replace fragments to an activity at runtime in order to create a dynamic experience.

    具体的实现是FragmentTransaction; 

    

FragmentTransaction ft = fragmentManager.beginTransaction();
 
    4,addToBackStack
       可以在commit之前使用addToBackStack将上次的transaction放到一个堆栈中,这样点击后退键的时,就能恢复上次的操作;
</pre><pre name="code" class="java">    5,BackStackEntry
<pre name="code" class="java">       FragmentTransaction 添加删除fragment并不会对这个栈进行操作,只有addToBackStack,popBackStack才可以;
<pre name="code" class="java">    6,popBackStack(tag, 0);
      可以清空包括tag及其之上的所有fragment

 五:fragment之间的交互

         1,fragment之间的交互要通过它们关联的activity来进行

          2,activity可以通过findFragmentById来获取对应的fragment,并进行交互;

            也可以通过fragmentManager.findFragmentByTag(tag)获取对应的fragment;

            在添加的时候使用FragmentTransactio  add(android.R.id.primary,fragment, fragment.getClass().getName())来设置tag;



六,源码

    1,popBackStack

       会将其上的所有节点删除;

       

for (int i=mBackStack.size()-1; i>index; i--) {1446                states.add(mBackStack.remove(i));1447            }

   2,addOnBackStackChangedListener

      这个回调不管是添加还是删除stack节点都会调用












     













0 0
原创粉丝点击