Fragment栈和事务的介绍---基础知识(四)

来源:互联网 发布:查看交换机mac地址 编辑:程序博客网 时间:2024/05/14 07:08
一  基础知识
    (1)栈: 
主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)

二  回退事件 

      (一 )
Transaction事务回退的原则  (重点)
              回退是以commit()提交的一次事务为单位的,而不是以其中的add,replace等等操作为单位回退的,即,如果我们在一次提交是添加了fragment2,fragment3,fragment4,那么回退时,会依据添加时的顺序,将它们一个个删除,返回到没有添加fragment4,fragment3,fragment2的状态

注意 加了addToStaskBack之前,replace一下,之前的fragment只会执行 onPaces,onStop,onDestory,只会消除视图结构,之前的Fragment的实例还在
    
      (二)   回退栈

        (1) 实现方式: 要使用回滚功能,只需要要使用下面两个代码: transaction.commit()之前,使用addToBackStack()将其添加到回退栈中。

  注意:
    ①  如果没有加入回退栈,那么fragment会和当前的activity共同的消亡
    ②  弹栈,按back键,remove执行的生命周期都是一样的
        

     (2) 代码方法 (加入回退栈方法
        ① transaction.addToBackStack(String tag);  // 标记本次的回滚操作
      
     (3) 回退方法代码(弹栈方式
        ① manager.popBackStack(); 
      注意:popBackStack()是弹出默认的最上层的栈顶内容,

                 ②    void popBackStack(int id, int flags);  
  1.       void popBackStack(String name, int flags);  
                  注意:当栈中有多层时,我们可以根据id或TAG标识来指定弹出到的操作所在层

                ③ 参数理解
                    
  • 参数int id是当提交变更时transaction.commit()的返回值。
  • 参数string name是transaction.addToBackStack(String tag)中的tag值;
  • 至于int flags有两个取值:0或FragmentManager.POP_BACK_STACK_INCLUSIVE;
  • 当取值0时,表示除了参数一指定这一层之上的所有层都退出栈,指定的这一层为栈顶层; 
  • 当取值POP_BACK_STACK_INCLUSIVE时,表示连着参数一指定的这一层一起退出栈; 


          ④   使用popBackStack()来弹出栈内容的话,调用该方法后会将事物操作插入到FragmentManager的操作队列,只有当轮询到该事物时才能执行。如果想立即执行事物的话
  1. popBackStackImmediate()  
  2. popBackStackImmediate(String tag)  
  3. popBackStackImmediate(String tag, int flag)  
  4. popBackStackImmediate(int id, int flag)  



  1. manager.findFragmentById();  //根据ID来找到对应的Fragment实例,主要用在静态添加fragment的布局中,因为静态添加的fragment才会有ID  
  2. manager.findFragmentByTag();//根据TAG找到对应的Fragment实例,主要用于在动态添加的fragment中,根据TAG来找到fragment实例  











  

    
0 0