viewPager+Fragment的生命周期和预加载问题

viewPager+Fragment的生命周期和预加载问题


      在项目中用到了viewPager + Fragment 的组合进行页面的滑动切换。在viewPager

中加入了3个Fragment:FragmentA,FragmentB,FragmentC,分别在每个Fragment

中的生命周期方法中加入log日志。来查看页面切换时,Fragment生命周期的调用。


       进入FragmentActivity主页,加载第一个FragmentA时发现:除了加载FragmentA的

同时,也加载了FragmentB。如图:

viewPager+Fragment的生命周期和预加载问题_第1张图片


     在项目中,用到ViewPager+FragmentFragment会进行预加载,例如你在ViewPager

中添加了三个Fragment,当加载ViewPager中第一个Fragment时,它会默认帮你预先

加载了第二个Fragment,当你加载第二个Fragment时,它会帮你加载第三个Fragment。

如图:当滑动到FragmentB时,FragmentC也进行了预加载。

viewPager+Fragment的生命周期和预加载问题_第2张图片

预加载只会加载下一页,但是它会销毁上一页的前面那页。列如:加载到FragmentC的

时候,对FragmentB没影响,但它会销毁FragmentA,即调用了FragmentA的onPause(),

onStop(),onDestroyView();如图下所示:滑入了FragmentC的页面:


viewPager+Fragment的生命周期和预加载问题_第3张图片

再从第三页的FragmentC滑回第二页的FragmentB,会重新调用FragmentA的页面创建方法。如图:

viewPager+Fragment的生命周期和预加载问题_第4张图片

再从FragmentB滑回FragmentA则会销毁FragmentC,而滑到FragmentA时并不会再次调用FragmentA的生命周期的方法,因为已经在加载FragmentB的同时,已经预先加载了FragmentA。如图:

viewPager+Fragment的生命周期和预加载问题_第5张图片

最后退出FragmentActivity时FragmentA,FragmentB,FragmentC都调用了各自的onDetach()的方法。

viewPager+Fragment的生命周期和预加载问题_第6张图片


注意:onAttach()是当碎片和活动建立关联的时候调用。

      onDetach()是当碎片和活动解除关联的时候调用的方法。

      当想知道FragmentActivity所正在哪个Fragment时可以通过调用:ViewPager中的

      getCurrentItem()方法。通过这个方法可以得到当前的子Fragment的位置












你可能感兴趣的:(Android开发)