У меня огромный RecyclerView
с GridLayoutManager
. Иногда отображается небольшое количество элементов, и в этом случае мне нужно отключить прокрутку. Прокрутку следует включать только тогда, когда в RecyclerView отображается слишком много элементов, поэтому прокрутка необходима.
Почему? Потому что, когда пользователь достаточно быстро нажимает на элементы, прослушиватель кликов не срабатывает. Пользователь случайно немного перемещает RecyclerView. Recycler onTouchListener
получает EVENT_MOVE
и использует событие.
Я попытался создать собственный GridLayoutManager с переопределенным методом canScrollVertically()
:
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.
Я много чего пытаюсь отключить прокрутку, когда места достаточно для всех элементов, но за день не нашел подходящего способа сделать это. Буду признателен за любую помощь!