如何在 ViewPager2中禁用滑动?

是否可以在新的 android viewpager2组件中启用-禁用刷新?

48591 次浏览

在引擎盖下面,ViewPager2RecyclerView一起工作,用来放大片段视图,但是 RecyclerView是隐藏的,所以他们使它更加白痴。

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

Hacky 方法是把子元素放在位置0,也就是 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 改变了用于回收视图的布局管理器,也就是说,他们从 LinearLayoutManager移开,这不会工作,它将需要重写一些方法,并确保超级方法被调用。

第二种方法是将 ViewPager2子类化,即 ViewGroup,然后在将触摸事件发送到子视图(正如您所猜测的 RecyclerView)之前,在拦截触摸事件方面施展魔法,并小心不要阻止点击。

现在可以使用 Version 1.0.0-alpha02启用-禁用刷新 viewpager2

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

版本1.0.0

新功能

  • 禁用用户输入的能力(setUserInputEnabledisUserInputEnabled)

空气污染指数变化

  • ViewPager2级期末考试

修复漏洞

  • FragmentStateAdapter稳定性修复

禁止在 viewpager2中滑动的样本代码

myViewPager2.setUserInputEnabled(false);

允许在 viewpager2中滑动的样本代码

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

如果您正在使用 Android 数据绑定,您可以简单地禁用它您的布局 xml 文件。

app:userInputEnabled="@{false}"