您的位置:首页 > 其它

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

2015-10-09 13:53 357 查看
viewPager+Fragment的生命周期和预加载问题

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

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

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

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

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



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

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

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

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



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

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

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



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



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



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



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

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

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

      getCurrentItem()方法。通过这个方法可以得到当前的子Fragment的位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息