如何禁用 ViewPager2 中的滑动?

How to disable swiping in ViewPager2?

是否可以在新的 android viewpager2 组件中启用/禁用滑动?

在引擎盖下 ViewPager2RecyclerView 一起用于膨胀片段视图,但 RecyclerView 是隐藏的,因此它们使其更加白痴证明。

 val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
 rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)

Hacky 方法是让子元素位于零位置,即 RecyclerView 并通过包装布局管理器来禁用布局管理器中的滚动:

inner class NonScrollingLayoutManager(context: Context, val layoutManager: LinearLayoutManager) :
    LinearLayoutManager(context, layoutManager.orientation, layoutManager.reverseLayout) {

    override fun canScrollVertically(): Boolean  = layoutManager.orientation == HORIZONTAL


    override fun canScrollHorizontally(): Boolean  =  layoutManager.orientation == VERTICAL

}

请注意,如果 API 更改了用于 RecyclerView 的布局管理器,即它们从 LinearLayoutManager 移开,这将不起作用,并且需要重写一些方法并确保超级方法是叫。

第二种方法是 ViewPager2 的子类,它是 ViewGroup,然后在触摸事件被分派到子视图之前(正如您猜想的那样,RecyclerView) 并注意不要阻止点击。

现在可以使用 Version 1.0.0-alpha02

启用/禁用滑动 viewpager2

使用implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'

Version 1.0.0

新功能

  • 能够禁用用户输入(setUserInputEnabledisUserInputEnabled

API 变化

  • ViewPager2 class 决赛

错误修复

  • FragmentStateAdapter 稳定性修复

用于在 viewpager2 中禁用滑动的示例代码

myViewPager2.setUserInputEnabled(false);

在 viewpager2 中启用滑动的示例代码

myViewPager2.setUserInputEnabled(true);
viewPager2.setUserInputEnabled(false);

如果您正在使用 Android 数据绑定,您只需在布局 xml 文件中禁用它即可。

app:userInputEnabled="@{false}"