Fragment
常见知识点整理。
Fragment生命周期
创建Fragment
创建Fragment
一般有两种方式,在xml中定义和动态创建,我们通常使用动态创建的方式。并且传参是通过setArguments()
来完成,这样在应用重启时可以通过savedInstanceState
获取完整的参数值。
|
|
在Fragment
中获取宿主Activity
通常情况下我们会通过getActivity()来获取宿主Activity
,但是某些情况下这个方法会返回null
,所以兼容的方法就是在onAttach()
方法中赋值然后获取。
|
|
back stack
对Fragment生命周期的影响
- 没有加入后退栈的
Fragment
在remove
或者被replace
的时候会完整的走完生命周期直到onDetach()
。 - 加入后退栈的
Fragment
在remove
或者replace
的时候只会走到onDestoryView()
,当popEnter
的时候会从onCreateView()
走到onResume
。
hide
,show
方法的特别之处
hide
和show
方法不会触发Fragment
生命周期的变化,只会触发onHiddenChanged()
方法。- 创建
Fragment
不会触发onHiddenChanged()
方法。 - 只有已经存在的
Fragment
才能调用hide
,show
方法。
其他注意事项
- 当
Fragment
只调用add
没有调用remove
或者replace
的时候,如果这时候宿主Activity
生命周期变化的话,其中所有add
进来的Fragment
的生命周期都会相应的变化,Activity#onStop()
的时候Fragment#onStop()
也会执行,其他生命周期类似。需要注意的是Fragment
执行的顺序是按照add
进去的顺序执行的。
add AFragment
,add BFragment
。后面生命周期的变化就是先执行AFragment
再执行BFragment
的。
- 当使用
back stack
时,如果宿主Activity
生命周期变化的话只会触发当前Fragment
生命周期变化,栈里其他Fragment
生命周期只受FragmentTransaction
影响