Fragment在不同情况下的生命周期

本文详细探讨了Fragment在不同场景下的生命周期,包括在Activity中的replace操作、在ViewPager中的切换,以及涉及到onActivityResult方法的使用。通过实例分析了Fragment在被替换、初次加载、已加载等状态下的生命周期变化,帮助读者深入理解Fragment的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一直对Fragment的生命周期很疑惑,虽然很多文章都介绍过Fragment完整的生命周期,但在实际使用中,不同情况下Fragment各个生命周期方法的调用规律都不一样,比如在ViewPager中切换Fragment,所调用的生命周期方法就跟想象的不太一样)所以最近研究了一下Fragment的生命周期,在这里总结一下。


首先按照惯例还是把下面两张图放在这里参考:


下面是不同情况下Fragment的生命周期:


1、Fragment在Activity中replace

新替换的Fragment:onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

被替换的Fragment:onPause > onStop > onDestroyView > onDestroy > onDetach


2、Fragment在Activity中replace,并addToBackStack

新替换的Fragment(没有在BackStack中):onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

新替换的Fragment(已经在BackStack中):onCreateView > onViewCreated > onActivityCreated > onStart > onResume

被替换的Fragment:onPause > onStop > onDestroyView


3、Fragment在ViewPager中切换

这里有很多种情况,我们先将切换前的的Fragment称为PreviousFragment,简称PF;切换后的Fragment称为NextFragment,简称NF;其他Fragment称为OtherFragment,简称OF。

(在ViewPager中setUserVisibleHint能反映出Fragment是否被切换到后台或前台,所以在这里也当作生命周期)


A、如果相关的Fragment没有被加载过:

NF: setUserVisibleHint(false) > onAttach > onCreate > setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

OF跟NF相邻: setUserVisibleHint(false) > onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume


B、如果相关的Fragment已经被加载过:

NF跟PF相邻  :setUserVisibleHint(true)

NF跟PF不相邻:setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

PF跟NF相邻  :setUserVisibleHint(false)

PF跟NF不相邻:setUserVisibleHint(false) > onPause > onStop > onDestroyView

OF跟PF相邻:onPause > onStop > onDestroyView

OF跟NF相邻:onCreateView > onViewCreated > onActivityCreated > onStart > onResume

OF夹在PF和NF中间:不调用任何生命周期方法


C、如果重写了FragmentPagerAdapter的destroyItem方法,并且相关Fragment已经加载过:

则相互切换时只会调用setUserVisibleHint


4、Fragment进入了运行状态:

Fragment在上述的各种情况下进入了onResume后,则进入了运行状态,以下4个生命周期方法将跟随所属的Activity一起被调用:

onPause > onStop > onStart > onResume


5、关于Fragment的onActivityResult方法:

使用Fragment的startActivity方法时,FragmentActivity的onActivityResult方法会回调相应的Fragment的onActivityResult方法,所以在重写FragmentActivity的onActivityResult方法时,注意调super.onActivityResult。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值