FragmentPagerAdapter和PagerAdapter的区别

21

我阅读了 Android PageAdapter 和 FragmentPageAdapter 的文档,但没有看到任何区别。我的意思是其中一个是片段,另一个不是,但是...就只有这些吗?我对片段的经验不是很丰富,所以也许这就是我没有注意到任何区别的原因。

那么,如果我使用 FragmentPagerAdapter 或 PagerAdapter,有什么区别呢?

2个回答

23

区别在于你可以在 FragmentPageAdapter 内部使用片段(Fragments)。如果你想要在代码的其他部分中使用片段,那么这就是适合你的适配器。 否则,如果你只想要不会被重用的代码,你可以使用 PagerAdapter


正常的 PagerAdapter 中每个页面在你滑动手指时都会被重新创建吗?还是说它会重用视图?或者你是指那些不会在其他类中被重用的代码?谢谢。 - Raykud
不,我的意思是当你使用片段时,通常会在多个活动中使用这些片段。片段与包含它们的活动相关联,因此在这种情况下视图的可重用性与viewPager中的相同。在帖子中,我谈到的是关于功能的可重用性,而不是关于视图的可重用性。抱歉没有恰当地解释清楚。 - jegumi
@jegumi 你的意思是“不会被重复使用”吗? - IgorGanapolsky
只需在应用程序的一个地方(例如一个活动)使用该片段即可。 - jegumi

9

实现了一个PagerAdapter,它使用Fragment来管理每个页面。但是我强烈建议使用FragmentStatePagerAdapter类,因为它还可以处理保存和恢复片段状态的工作。

当页面数量很大时,FragmentStatePagerAdapter版本的pager更有用,更像一个列表视图。当用户看不到页面时,它们的整个片段可能会被销毁,只保留该片段的保存状态。这允许pager保持与每个已访问页面关联的内存量要少得多,而与FragmentPagerAdapter相比,代价可能是在页面之间切换时潜在的更高的开销。

使用FragmentPagerAdapter时,主ViewPager必须设置有效的ID。

子类只需要实现getItem(int)和getCount()就可以拥有一个工作适配器。

下面是一个示例包含列表片段的FragmentStatePagerAdapter页面的实现


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接