关于Fragment与Activity生命周期前后关系详解

本篇文章讲解自己探讨的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测试的结果,可能存在错误,欢迎各位指正。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值