ViewPager是我们经常使用的一个组件,而这个组件经常和Fragment结合在一起用,可以完成滑动来显示不同的Fragment。我们要管理这里面的Fragment的切换,可以使用PagerAdapte。
PagerAdapter是提供给ViewPager的Pages的适配器,而FragmentPagerAdapter与FragmentStatePagerAdapter都是继承自PagerAdapter这个基类,是PagerAdapter的两种实现。
我们先通过源码来了解设计者的设计目的。
FragmentPagerAdapter的整个流程就是 add -> detach -> attach -> detach -> ...因为用的是detach和attach的路,所以系统会保存Fragment的State。它适用于基本的使用场景,但是如果是有大量的Tab的情况,FragmentPagerAdapter就不太适用了,因为它的状态都用系统保存常驻在内存之中了,并且Fragment的实例也常驻在内存,会导致大量的内存占用
不同于FragmentPagerAdapter,FragmentStatePagerAdapter的机制是: add -> save state -> remove -> initial state -> add -> ...FragmentStatePagerAdapter是采用remove的方式销毁Fragment,但活动的Fragment实例保存在mFragments之中,在destroyItem方法内又会被移除,但是状态不会被删除,总是保存在mSavedState集合之中