FragmentPagerAdapter与FragmentStatePagerAdapter的区别
简介
FragmentPagerAdapter和FragmentStatePagerAdapter是两种不同的类,用于在Android应用程序中实现PagerAdapter。当使用Android的ViewPager时,会用到这种页面适配器。这些页面适配器负责管理在ViewPager中显示的每个页面的生命周期。这两个适配器的共同点是它们都是PageAdapter类的子类。在本文中,我们将了解FragmentPagerAdapter和FragmentStatePagerAdapter的区别。
什么是Android中的适配器?
Android适配器是View和底层数据之间重要的桥梁,它有助于填充View。适配器的作用是从数据源(例如数组或数据库)获取数据,并将每个项目转换为在Activity中显示的结果视图。它充当View和数据集之间的桥梁,提供对数据项的访问。Android适配器本质上是一个用于为View提供数据的项目集合。适配器从数据源为View提供数据,并将数据集中的每个项目映射到一个View对象,例如TextView、ImageView或ListView。适配器充当数据源和View之间的中介,它负责确定将在View中显示哪些数据以及如何格式化这些数据。
在Android应用程序中,适配器用于不同类型的视图,例如ListView、RecyclerView、底部导航视图、TabLayout等等。任何具有类似重复格式内容的视图都可以借助适配器来处理。适配器会将内容设置为要在该视图中显示的每个内容。有不同类型的适配器用于不同类型的视图。在本文中,我们将了解Android应用程序中的FragmentPagerAdapter和FragmentStatePagerAdapter。
什么是Android中的FragmentPagerAdapter?
FragmentPagerAdapter是PagerAdapter的一种实现,它使用Fragment来管理每个页面。它将每个页面表示为一个Fragment,该Fragment保留在内存中,尽管如果用户导航离开页面,它可能会被暂停或停止。当需要分页浏览少量通常更静态的Fragment时,例如一组选项卡,这非常有用。用户访问的每个页面的Fragment都将保存在内存中,但其视图层次结构在不可见时可能会被销毁。由于Fragment实例可以保留任意数量的状态,这可能会导致使用大量的内存。对于大量页面,请考虑使用FragmentStatePagerAdapter。
什么是Android中的FragmentStatePagerAdapter?
另一方面,FragmentStatePagerAdapter会在Fragment对用户不可见时销毁它们。当您有大量Fragment或与Fragment关联的数据是动态的并且可能会随时间变化时,这非常有用。FragmentStatePagerAdapter是一个Android组件,允许您轻松地在Android应用程序中创建滑动选项卡。它的工作原理是为选项卡中的每个页面创建一个Fragment,然后利用ViewPager来管理这些Fragment。这允许轻松地在应用程序的不同页面之间导航,并在每个页面之间平滑过渡。
FragmentPagerAdapter和FragmentStatePagerAdapter的区别
FragmentPagerAdapter |
FragmentStatePagerAdapter |
---|---|
FragmentPagerAdapter将所有Fragment实例保存在内存中。 |
FragmentStatePagerAdapter将当前Fragment实例保存在内存中,并将其他Fragment实例的状态保存到磁盘。 |
FragmentPagerAdapter使用更多内存。 |
与FragmentPagerAdapter相比,FragmentStatePagerAdapter使用更少的内存。因为它不会同时将所有Fragment保存在内存中。 |
FragmentPagerAdapter的滚动性能低于FragmentStatePagerAdapter。 |
FragmentPagerAdapter的滚动性能低于FragmentStatePagerAdapter。 |
FragmentPagerAdapter适用于少量页面。 |
FragmentStatePagerAdapter适用于大量页面。 |
结论
总之,“FragmentPagerAdapter”在您需要始终将少量Fragment(即页面)保存在内存中以提高性能时是一个不错的选择,而“FragmentStatePagerAdapter”在您有大量Fragment(即页面)并希望优化内存使用和滚动性能,或者与Fragment关联的数据可能会随时间变化时是更好的选择。