viewpager页面切换和fragment的事务FragmentTransaction和fragment生命周期的关系
所有的所有一切都在图里。
所有的所有一切都在图里。
所有的所有一切都在图里。
重要的话说三遍。
当viewpager新建,第一次进入时===add===(onAttach—》onResume)
使用FragmentPagerAdapter做适配器时,当第一次进来viewpager时,viewpager会把符合OffscreenPageLimit原则的所有fragment进行创建,类似于FragmentTransaction的add,此时所有的这些符合OffscreenPageLimit原则的fragment的生命周期都会从onAttach——-一直走到———onResume。当viewpager左右切换时,那些第一次进入OffscreenPageLimit范围内的fragment的生命周期跟上面一样,走add。
OffscreenPageLimit范围内的显示/隐藏时===show/hide===(setUserVisibleHint(true)/setUserVisibleHint(false))
当OffscreenPageLimit范围内的fragment显示隐藏时,如同FragmentTransaction的show/hide,不走常规的生命周期,走setUserVisibleHint方法,还有onhidechange方法。
当非第一次进入/离开OffscreenPageLimit范围时===attach/detach===((onCreateView—–》onResume)/(onPause—-》onDestroyView))
非第一次的意思就是,当fragment曾经进入过OffscreenPageLimit范围内,后来又离开又进入时。
当viewpager被销毁时===remove===(—-》onDestroy—-onDetach)
只有当viewpager被销毁不存在时,fragment才会被从Viewpager中remove,即走fragment的ondestroy以及ondetach的生命周期方法。
总结
如上,我们发现viewpager和fragment是多么的相配呀,简直绝配。
我们也知道了viewpager页面切换与fragment 事务和生命周期的紧密的联系。
一个viewpager涉及到了所有的FragmentTransaction事务和所有的Fragment生命周期。简直就是一个精细完美结合的单元。以前从来没搞清楚过它的原理,所以一直没敢用过,现在搞清楚了,这下放心了。