FragmentStatePageAdapter与FragmentPageAdapter的区别

在ViewPager中使用Fragment的情况下,可以给ViewPager设置两种Adapter,一种是FragmentStatePagerAdapter,一种是FragmentPagerAdapter。
那这两种Adapter有什么区别呢?

  • FragmentStatePageAdapter
    FragmentStatePagerAdapter会销毁不需要的Fragment,一般来说,ViewHolder会保存正在显示的Fragment和它左右两边第一个Fragment,分别为A、B、C,那么当显示的Fragment变成C时,保存的Fragment就会变成B、C、D了,而A此时就会被销毁,但是需要注意的是,此时A在销毁的时候,会通过onSaveInstanceState方法来保存Fragment中的Bundle信息,当再次切换回来的时候,就可以利用保存的信息来恢复到原来的状态。
    图示如下

    FragmentStatePageAdapter.png

  • FragmentPageAdapter
    FragmentPageAdapter会调用事务的detach方法来处理,而不是使用remove方法。因此,FragmentPageAdapter只是销毁了Fragment的视图,其实例还是保存在FragmentManager中。

    FragmentPageAdapter.png

  • 如何选择Adapter呢
    从上文得知,FragmentStatePageAdapter适用于Fragment较多的情况,例如月圆之夜这个卡牌游戏,需要展示数十个不同的场景,需要数十个不同的Fragment,如果这些Fragment都保存在FragmentManager中的话,对应用的性能会造成很大的影响。
    而FragmentPageAdapter则适用于固定的,少量的Fragment情况,例如和TabLayout共同使用时,典型的一个例子就是知乎上方的TabLayout。

    知乎.jpg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容