FragmentPagerAdapter与FragmentStateAdapter的区别

FragmentPagerAdapter

使用FragmentPagerAdapter 时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter了,FragmentPagerAdapter 适用于只有少数的page情况,像选项卡。

FragmentStatePagerAdapter

这个时候你可以考虑使用FragmentStatePagerAdapter ,当使用FragmentStatePagerAdapter 时,如果Fragment不显示,那么Fragment对象会被销毁,(滑过后会保存当前界面,以及下一个界面和上一个界面(如果有),最多保存3个,其他会被销毁掉)
但在回调onDestroy()方法之前会回调onSaveInstanceState(Bundle outState)方法来保存Fragment的状态,下次Fragment显示时通过onCreate(Bundle savedInstanceState)把存储的状态值取出来,FragmentStatePagerAdapter 比较适合页面比较多的情况,像一个页面的ListView 。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: FragmentStateAdapter 是 Android 框架中用于管理 Fragment 状态的适配器。它继承自 RecyclerView.Adapter,可以在 ViewPager2 中使用,用于替代原来的 FragmentPagerAdapter。与 FragmentPagerAdapter 相比,FragmentStateAdapter 会在 Fragment 状态发生变化时释放内存,因此更适合管理大量 Fragment 的场景。 ### 回答2: FragmentStateAdapter是Android Jetpack库中的一个类,用于在ViewPager2中管理Fragment的适配器。与普通的FragmentPagerAdapterFragmentStatePagerAdapter不同,FragmentStateAdapter是一个StatefulAdapter,它可以保持Fragment的状态而不销毁,以提高性能。 FragmentStateAdapter适用于需要在ViewPager2中展示大量Fragment的情况。它的内部使用了FragmentTransaction的detach和attach方法来实现Fragment的隐藏和显示,从而实现了Fragment的状态的保持和恢复。 使用FragmentStateAdapter非常简单。首先,我们需要创建一个继承自FragmentStateAdapter的适配器类,并重写getItemCount和createFragment方法。getItemCount返回要展示的Fragment数量,createFragment根据position返回对应位置的Fragment实例。 接下来,我们在Activity或Fragment中实例化ViewPager2,并通过setAdapter方法将适配器设置给ViewPager2。然后,我们可以通过ViewPager2.setCurrentItem方法设置ViewPager2的当前位置。 在使用FragmentStateAdapter时,需要注意的是,由于FragmentStateAdapter会保持Fragment的状态而不销毁,所以在Fragment中的onCreateView等生命周期方法中,需要处理Fragment重建时数据的恢复。 总结来说,FragmentStateAdapter是Android Jetpack库中用于管理Fragment的适配器类,它可以在ViewPager2中展示大量Fragment,并保持Fragment的状态而不销毁,以提高性能。它的使用非常简单,只需要继承FragmentStateAdapter类并重写几个方法即可。同时,在使用FragmentStateAdapter时需要注意在Fragment中处理数据的恢复。 ### 回答3: FragmentStateAdapter是Android Jetpack中的一个类,用于在ViewPager2中管理Fragment列表。它是FragmentPagerAdapter的升级版,用于更高效地管理和滑动大量Fragment页面。 使用FragmentStateAdapter,我们可以通过继承它并重写几个方法来自定义适配器。首先,我们需要在构造函数中传入FragmentActivity或Fragment,这样适配器才知道在哪个页面上管理Fragment。 重写的几个方法包括getItemCount()、createFragment()和getItemId()。通过getItemCount()方法,我们可以返回要显示的Fragment数量。通过createFragment()方法,我们可以返回要显示的Fragment实例。通过getItemId()方法,我们可以返回Fragment的唯一标识符,以便在数据集更改时更新Fragment。 与FragmentPagerAdapter相比,FragmentStateAdapter使用了一种称为“FragmentState”机制的新方式来管理Fragment。它会在Fragment不可见时,实际上销毁Fragment实例,并在需要时按需重新创建它们。这种机制可以节省内存,并且适用于拥有大量Fragment的ViewPager2。 总的来说,FragmentStateAdapter是一个便于管理和滑动Fragment页面的类。它的设计目的是优化内存,并且适用于需要动态加载和销毁Fragment的情况。通过继承这个适配器并重写几个方法,我们可以自定义适配器以适应不同的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值