127

是否可以在新的 androidviewpager2组件中启用-禁用滑动?

4

4 回答 4

277

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

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

版本 1.0.0

新功能

  • 能够禁用用户输入 ( setUserInputEnabled, isUserInputEnabled)

API 更改

  • ViewPager2班级决赛

Bug修复

  • FragmentStateAdapter稳定性修复

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

myViewPager2.setUserInputEnabled(false);

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

myViewPager2.setUserInputEnabled(true);
于 2019-03-16T05:40:01.323 回答
8

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

app:userInputEnabled="@{false}"
于 2021-02-16T14:36:44.773 回答
6

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

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

RecyclerViewHacky 方法是通过包装布局管理器,让子级位于位置零,并禁用布局管理器中的滚动:

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 的布局管理器,即它们远离LinearLayoutManagerthis 将无法正常工作,并且需要重写一些方法并确保调用超级方法。

第二种方法是子类ViewPager2ViewGroup然后在将触摸事件分派到子视图(如您所料RecyclerView)之前执行拦截触摸事件的魔法,并注意不要阻止点击。

于 2019-03-06T08:59:58.783 回答
6
viewPager2.setUserInputEnabled(false);
于 2020-12-03T09:41:52.297 回答