PagerView的三种适配器PagerAdapter、FragmentPagerAdapter与FragmentStatePagerAdapter

PagerView的三种适配器PagerAdapter、FragmentPagerAdapter与FragmentStatePagerAdapter_第1张图片
3104089-b9d25e7bc765e06a.png
PagerView的三种适配器PagerAdapter、FragmentPagerAdapter与FragmentStatePagerAdapter_第2张图片
3104089-1922742034e2e8ac.png

FragmentStatePagerAdapter总是缓存当前页面与左右两边的页面。会删除距离当前界面较远的Fragment实例。
FragmentPagerAdapter会缓存所有已经创建的fragment实例。
destroyItem()方法中FragmentPagerAdapter调用事务的detach()方法,而FragmentStatePagerAdapter调用remove()方法移除Fragment。

Fragment生命周期


PagerView的三种适配器PagerAdapter、FragmentPagerAdapter与FragmentStatePagerAdapter_第3张图片
3104089-957de696ccdcdbab.png

detach()方法执行到onDestroyView(),调用attach()方法后从onCreateView()执行到onResume()。
remove()方法执行到onDetach()。销毁实例。
ViewPager会始终缓存三个View。

三种Adapter的缓存策略
而三种Adapter的缓存策略则各有不同:
PagerAdapter:缓存三个,通过重写instantiateItem和destroyItem达到创建和销毁view的目的。
FragmentPagerAdapter:内部通过FragmentManager来持久化每一个Fragment,在destroyItem方法调用时只是detach对应的Fragment,并没有真正移除!
FragmentStatePagerAdapter:内部通过FragmentManager来管理每一个Fragment,在destroyItem方法 调用时移除对应的Fragment。

当展示的子Fragment多时候选择FragmentStatePagerAdapter。少的时候可以使用FragmentPagerAdapter

你可能感兴趣的:(PagerView的三种适配器PagerAdapter、FragmentPagerAdapter与FragmentStatePagerAdapter)