【发布时间】:2019-06-21 17:47:36
【问题描述】:
我有一个巨大的RecyclerView 和GridLayoutManager。
有时会显示少量项目,在这种情况下我需要禁用滚动。只有在 RecyclerView 中显示的项目过多时才应启用滚动,因此需要滚动。
为什么?
因为当用户在项目上单击得足够快时,不会触发单击侦听器。用户不小心移动了 RecyclerView 一点。 Recycler 的onTouchListener 获取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。
当所有项目都有足够的空间时,我正在尝试很多方法来禁用滚动,但我一天都没有找到合适的方法来做到这一点。 我将不胜感激!
【问题讨论】:
标签: android kotlin scroll android-recyclerview disable