我有一个巨大RecyclerView
的GridLayoutManager
。有时会显示少量项目,在这种情况下我需要禁用滚动。仅当 RecyclerView 中显示的项目过多时才应启用滚动,因此需要滚动。
为什么?
因为当用户以足够快的速度点击项目时,不会触发点击监听器。用户不小心移动了 RecyclerView 一点。RecycleronTouchListener
获取EVENT_MOVE
并消费该事件。
我尝试使用重写的canScrollVertically()
方法创建自定义 GridLayoutManager:
override fun canScrollVertically(): Boolean {
return super.canScrollVertically() && isScrollEnabled
}
我使用这个函数来检查 RecyclerView 是否可滚动:
fun RecyclerView.isScrollableVertically(): Boolean {
return computeVerticalScrollRange() > height
}
然后,我更新 isScrollEnable 字段:
val isScrollableVertically = items_list.isScrollableVertically()
(category_items_list.layoutManager as CustomGridLayoutManager).setScrollEnabled(isScrollableVertically)
但即使有很多项目要显示,也会items_list.isScrollableVertically()
返回 false。
当所有项目都有足够的空间时,我正在尝试很多事情来禁用滚动,但是我一天都没有找到合适的方法来做到这一点。我将不胜感激任何帮助!