【发布时间】:2019-07-25 12:08:42
【问题描述】:
是否可以在新的android viewpager2组件中启用-禁用滑动?
【问题讨论】:
标签: android androidx android-viewpager2
是否可以在新的android viewpager2组件中启用-禁用滑动?
【问题讨论】:
标签: android androidx android-viewpager2
在幕后ViewPager2 与RecyclerView 一起使用来膨胀片段视图,但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)并注意不要阻止点击。
【讨论】:
pager.userInputEnabled = false
现在可以使用Version 1.0.0-alpha02启用-禁用滑动viewpager2
使用implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
新功能
setUserInputEnabled、isUserInputEnabled)API 更改
ViewPager2类决赛错误修复
FragmentStateAdapter 稳定性修复在 viewpager2 中禁用滑动的示例代码
myViewPager2.setUserInputEnabled(false);
启用在 viewpager2 中滑动的示例代码
myViewPager2.setUserInputEnabled(true);
【讨论】:
viewPager2.setUserInputEnabled(false);
【讨论】:
如果您使用的是 Android 数据绑定,您可以简单地在您的布局 xml 文件中禁用它。
app:userInputEnabled="@{false}"
【讨论】: