本篇文章讲解自己探讨的Activity动态添加Fragment时,分4种情况:
1.使用replace(),且不加入回退栈addToBackStack(null);
2.使用replace(),且加入回退栈addToBackStack(null);
3.使用add(), 且不加入回退栈addToBackStack(null);
4.使用add(), 且加入回退栈addToBackStack(null);
以下为对这4种情况Fragment与Activity生命周期之间:
注:以下1-->FirstFragment;2-->SecondFrgment;3-->ThirdFragment
---------------------------------------------我是你们期待的分割线---------------------------------------------------------------------
1使用replace(),且不加入回退栈addToBackStack(null):
第一次replace(1)时:
第一次replace(2)时:
第一次replace(3)时:
点击一次Back键即退出当前Activity:
使用replace()方法添加Fragment,效果如同于remove()+add()fragment;执行到onDetach();
2.使用replace(),加入回退栈addToBackStack(null):
第一次replace(1)时:
第一次replace(2)时:
第一次replace(3)时:
第二次replace(1)时:
点击Back键回退时,栈中fragment依次弹出
点击Back键退出Activity:
以上可以看出,使用replace()时,加入回退栈与不加入回退栈(即是否调用addToBackStack(null)方法)之间的区别在于:不加入回退栈,替换当前fragment是,被替换的fragment会执行onDetach()方法,若加入回退栈则只调用到onDestoryView()方法;加入回退栈,每次replace()都会向栈中添加fragment;
3.使用add(),不加入回退栈addToBackStack(null):
第一次add(1):
第一次add(2):
第一次add(3):
添加三个fargment,屏幕熄灭时调用:
添加顺序1,2,3后再次点击1/2/3,Activity/Fragment生命周期无变化,点击Back键直接退出:
以上,可看出当调用add()替换时,fragment生命周期保持同步,在Back键后直接退出Activity,Fragment按添加顺序销毁
4.使用add(),加入回退栈addToBackStack(null):
add(1)时:
add(2)时:
add(3):
突然无法上传图片了,就用文字描述吧,添加3时候和第三种情况添加3时相同;
最后点击Back键时是从回退栈中挨个弹出fragment之后,再点击退出Activity,如本例中3个fragment需要点击4次Back键,方可退出当前Activity,而非直接退出Activity
以上这些均是Demo测试的结果,可能存在错误,欢迎各位指正。