RecyclerView与ViewPager

Bos*_*sen 23 performance android

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

谢谢.

Mar*_*ski 34

我想说它们在内存使用和易于实现方面具有可比性.它们最不同的地方在于它们为用户提供的交互.

ViewPager旨在一次显示一个项目.可见项占据了整个宽度ViewPager.您一次只能滑动一个项目并且滚动总是捕捉到在中心显示一个项目 - 您永远不会处于中间位置,部分显示两个项目.

RecyclerView另一方面,使用水平布局管理器可以包含任何宽度的项目 - 您可以一次显示多个项目,或者您可以使项目宽度更宽,RecyclerView或者您可以匹配它们的宽度以模仿ViewPager.你可以自由滚动 - 你不仅限于一个项目宽度或RecyclerView宽度,你可以做一个滚动远距离的投掷手势.并且没有卡扣 - 当卷轴完成时,中心或任何一侧都没有对齐项目.

如你所见,有一些差异.我建议您根据要实现的UI选择窗口小部件.如果你想要ViewPager的行为(一次可见一个项目,滑动限制为一个项目并捕捉以显示完整项目),那么请使用ViewPager.使用a复制此行为是可能的,但不是微不足道的RecycleView.我肯定会说,RecyclerView如果你想让它表现得像,它会更难使用ViewPager.相反,定制ViewPager行为几乎是不可能的,所以如果那不是你想要的那么你绝对应该使用a RecyclerView.

  • 从支持库24.2.0开始,现在很容易实现在Recycler View中捕捉.此外,您可以通过重写Snap Helper类来模仿ViewPager行为.http://stackoverflow.com/questions/29134094/recyclerview-horizo​​ntal-scroll-snap-in-center (12认同)

Boo*_*tak 10

在易于实施方面(这只是我自己的意见),

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

在in中RecyclerView,RecyclerView.Adapter有类似notifyItemInserted(int position)或者notifyItemRemoved(int position)通知特定项目被添加或删除的方法,当您调用这些方法时,添加或删除项目时的动画已经处理.

而且,现在很容易通过使用RecyclerView来模仿ViewPager行为SnapHelper.有PagerSnapHelper,ViewPager只需几行代码就可以获得行为.如果您需要代码,可以与我联系.