zoukankan      html  css  js  c++  java
  • Fragment回退栈&commit()和commitAllowingStateLoss()

    Activity切换时是通过栈的形式,不断压栈出栈,在Fragment的时候,如果你不是手动开启回退栈,它是直接销毁再重建,但如果将Fragment任务添加到回退栈,情况就会不一样了,它就有了类似Activity的栈管理方式。

    使用Fragment时,可以通过用户交互来执行一些动作,比如增加、移除、替换等。所有这些改变构成一个集合,这个集合被叫做一个transaction。

    可以调用FragmentTransaction中的方法来处理这个transaction,并且可以将transaction存进由activity管理的back stack中,当用户按返回键时,就会自动回到上一个fragment的状态。和Activity一样的使用体验

    public void startToFragment(Context context, int container, Fragment newFragment) {
            FragmentManager manager = context.getFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();
            transaction.replace(container, newFragment);
            transaction.addToBackStack(context.getClass().getName()); 
         transaction.commit();
    }
    Fragment2 fragment2 = new Fragment2 ();
    startToFragment(getActivity(), R.id.layout_container, fragment2 );

    1,在FragmentManager.transaction.addToBackStack();向一个栈中一个一个的添加Fragment,从而实现在你添加后,可以在按返回键时一个一个的返回Fragment

    2,FragmentManager的popBackStack()方法,就是一个一个的返回Fragment

    3,FragmentManager的popBackStack(name,flag)方法,就是

       //其中name是加入栈中的Fragment名字

       //flag表示移走栈中Fragment的方式(0:把自己之前的弹出)(1:包括自己都弹出)

    4,FragmentManager的popBackStack(id,flag)方法

       //其中id,在FragmentManager事物提交时,会返回一个int值,每次提交会自动加1

       //flag表示移走栈中Fragment的方式(0:把自己之前的弹出)(1:包括自己都弹出)

    (补充:FragmentManager.commit()会返回一个int值,标记这次的提交!!)

    https://www.jianshu.com/p/b8aca9976608

    commit()和commitAllowingStateLoss()的区别

    Fragment的控制采用事务方式执行,在事务执行之前,用户可能已经点击了返回键,导致Activity的onSaveInstanceState()方法被调用,在保存当前activity实例的状态以备恢复。

    在onSaveInstanceState()方法中会将一个成员变量mStateSaved设为true。采用commit()方式提交事务,在执行时会检查mStateSaved的值,若为true,则会抛出异常。因此事务必须保证在用户点击返回键之前执行。

    而采用commitAllowingStateLoss()方式提交事务,在执行时不会检查mStateSaved的值,不会发生异常。

  • 相关阅读:
    杭电ACM 1297 Children’s Queue
    杭电ACM 1297 Children’s Queue
    Delta-wave
    
    <MySQL>MySQL创建表及相关约束
    <MySQL>MySQL的基本操作(增,删,改)
    <MySQL>MySQL的安装及安装中存在的问题
    <python>python中拷贝的问题
    <python>简单的学生管理系统V1.0
    <python>编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
  • 原文地址:https://www.cnblogs.com/genggeng/p/9959974.html
Copyright © 2011-2022 走看看