是否可以在新的 android viewpager2组件中启用-禁用刷新?
viewpager2
在引擎盖下面,ViewPager2和 RecyclerView一起工作,用来放大片段视图,但是 RecyclerView是隐藏的,所以他们使它更加白痴。
ViewPager2
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移开,这不会工作,它将需要重写一些方法,并确保超级方法被调用。
LinearLayoutManager
第二种方法是将 ViewPager2子类化,即 ViewGroup,然后在将触摸事件发送到子视图(正如您所猜测的 RecyclerView)之前,在拦截触摸事件方面施展魔法,并小心不要阻止点击。
ViewGroup
现在可以使用 Version 1.0.0-alpha02启用-禁用刷新 viewpager2
Version 1.0.0-alpha02
使用 implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
版本1.0.0
新功能
setUserInputEnabled
isUserInputEnabled
空气污染指数变化
修复漏洞
FragmentStateAdapter
禁止在 viewpager2中滑动的样本代码
myViewPager2.setUserInputEnabled(false);
允许在 viewpager2中滑动的样本代码
myViewPager2.setUserInputEnabled(true);
viewPager2.setUserInputEnabled(false);
如果您正在使用 Android 数据绑定,您可以简单地禁用它您的布局 xml 文件。
app:userInputEnabled="@{false}"