您的位置:首页 > 移动开发 > Android开发

Android实现滑动效果时选择FragmentStatePagerAdapter还是FragmentPagerAdapter?

2017-10-27 18:05 537 查看
Android开发中,为了实现滑动效果常常利用ViewPager+Fragment组合进行技术实现,为了管理ViewPager里的Fragment需要引用Adapter,对于Adapter谷歌提供了FragmentStatePagerAdapter和FragmentPagerAdapter两个类,这两个类都是继承自 PagerAdapter。那么在使用中怎么选择?是选择FragmentStatePagerAdapter还是FragmentPagerAdapter?在网上查了些资料,现总结如下。
FragmentPagerAdapter该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter。
FragmentStatePagerAdapter相对于FragmentPagerAdapter多了两个全局变量:
private ArrayList<Fragment.SavedState> mSavedState = new ArrayList<Fragment.SavedState>();
private ArrayList<Fragment> mFragments = new ArrayList<Fragment>();
mSavedState 保存每个Fragment的状态信息的列表
mFragments 保存每个Fragment实例对象的列表
FragmentStatePagerAdapter在我们切换不同的Fragment的时候,我们会把前面的Fragment销毁,而我们系统在销毁前,会把我们的我们Fragment的Bundle在我们的onSaveInstanceState(Bundle)保存下来。等用户切换回来的时候,我们的Fragment就会根据我们的instance state恢复出来。
利用FragmentPagerAdapter时,Fragment在切换的时候,不会销毁,而只是调用事务中的detach方法,这种方法,我们只会把我们的Fragment的view销毁,而保留了以前的Fragment对象。所以通过这种方式创建的Fragment一直不会被销毁。
FragmentPagerAdapter适用于Fragment比较少的情况,它会把每一个Fragment保存在内存中,不用每次切换的时候,去保存现场,切换回来在重新创建,所以用户体验比较好。而对于Fragment比较多的情况,需要切换的时候销毁以前的Fragment以释放内存,就可以使用FragmentStatePagerAdapter。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐