提问者:小点点

RecyclerView vs ViewPager


目前,我正在探索通过从左向右滑动来显示数据库中的数据的选项,并允许用户从数据数组中的任何位置添加和删除数据。我发现有两种可能的解决方案可以做到这一点。一种是具有水平滚动的RecyclerView,另一种是具有FragmentStatePagerAdapter的ViewPager。哪个更高效?在内存使用和易于实现方面?

谢谢。


共3个答案

匿名用户

我想说它们在内存使用和易于实现方面是相当的。它们最大的不同之处在于它们提供给用户的交互。

ViewPager旨在一次显示一个项目。可见项目占据了ViewPager的全部宽度。您一次只能滑动一个项目,并且滚动总是快速显示中间的一个项目——您永远不会处于部分显示两个项目的中间位置。

另一方面,带有水平布局管理器的RecyclerView可以有任何宽度的项目——你可以一次显示许多项目,或者你可以有比RecyclerView的宽度更宽的项目,或者你可以匹配它们的宽度来模仿ViewPager。你可以自由滚动——你不限于一个项目宽度或RecyclerView的宽度,你可以做一个翻转手势来滚动很远的距离。而且没有折断——当滚动完成时,没有将项目对齐到中心或任何侧面。

正如你所看到的,有一些不同之处。我建议你根据你想要实现的UI来选择你的小部件。如果你想要ViewPager的行为(一次可见一个项目,滑动仅限于一个项目并捕捉以显示整个项目),那么使用ViewPager。使用RecycleView复制这种行为是可能的,但并非微不足道。如果你想让它表现得像ViewPager,我肯定会说使用RecyclerView要困难得多。相反,自定义ViewPager的行为几乎是不可能的,所以如果这不是你想要的,那么你绝对应该使用RecyclerView

匿名用户

就易于实施而言(这只是我自己的看法),

ViewPager适合显示不需要经常添加和删除的数据列表,因为PagerAdapter不能通知每个特定的项目它被删除或添加它只能调用通知所有数据集都已更改。因此,当项目被添加或删除时,很难处理动画。

而在RecyclerView中,RecyclerView. Adapter具有诸如通知fyItemInserted(int位置)通知特定项目被添加或删除的方法,当您调用这些方法时,项目被添加或删除时的动画已经被处理。

此外,现在RecyclerView很容易通过使用SnapHelper来模仿ViewPager的行为。有PagerSnapHelper,只需几行代码就可以获得ViewPager的行为。如果你想要代码,可以联系我。

匿名用户

这两者之间没有可比性。基本上,在ViewPager中,你只能一次滚动一个项目(左右),在RecyclerView中,你可以滚动到任何索引。这完全取决于你的要求,你想如何使用它。你需要为ViewPages开发片段,每页一个。正如在RecyclerView中,你将有一个适配器将使用的项目。它们都很容易实现。它们都有很多例子,你可以看看并开始使用。