打开 ViewPager2 到特定位置而不滚动

Nar*_*Pal 11 android android-recyclerview android-viewpager2

我已经用一些视频(比如 10)实现了一个 recyclerview 。单击任何项​​目会打开一个viewpager2 which is on some other activity带有and单击的所有项目(来自recyclerview)的所有项目。之后,用户只能从那里滚动到其他项目。一切正常。

唯一的问题是当 recyclerview 项目单击打开 viewpager2 时的滚动。

Whenever any item is selected(10th). viewpager 首先打开,然后滚动到(第 10 个)位置。我想直接打开viewpager2的第10个位置而不滚动。任何帮助,将不胜感激。

我曾尝试将当前项目设置为

viewPagerReview.currentItem = recyclerviewItemSelectedPosition
Run Code Online (Sandbox Code Playgroud)

但是如果当前项目是 recyclerview 的最后一个位置,那么 viewpager 也会滚动到最后一个位置。

小智 18

好吧,根据AndroidDocs上的 ViewPager2,这是setCurrentItem(item: Int)可以做的:

设置当前选择的页面。如果 ViewPager 已经通过其当前适配器的第一个布局,当前项和指定项之间将有一个平滑的动画过渡。

因此,您将要使用另一种方法,这是setCurrentItem(item: Int, smoothScroll: Boolean)为了指定您是否想要smoothScroll

所以,在你的情况下,去:

viewPagerReview.setCurrentItem(recyclerviewItemSelectedPosition, false)
Run Code Online (Sandbox Code Playgroud)

  • 但这实际上并不可靠。有时它会选择正确的页面,有时则不会。可能是事件驱动的 Android 混乱中的竞争条件。我不得不使用 postDelayed() 稍微延迟一下,但请注意,这是一个令人讨厌的黑客行为,这并不能保证它可以在每个设备上工作:( (2认同)
  • 直到我更新到“androidx.viewpager2:viewpager2:1.1.0-alpha01”之前它对我不起作用 (2认同)