Android RecyclerView:如果有足够的空间容纳所有项目,则禁用滚动

Android RecyclerView:如果有足够的空间容纳所有项目,则禁用滚动,android,kotlin,scroll,android-recyclerview,disable,Android,Kotlin,Scroll,Android Recyclerview,Disable,我有一个巨大的RecyclerView和GridLayoutManager。 有时会显示少量项目,在这种情况下,我需要禁用滚动。只有在RecyclerView中显示的项目太多时才应启用滚动,因此需要滚动 为什么? 因为当用户在项目上单击足够快时,不会触发单击侦听器。用户不小心移动了一个RecyclerView。回收者的onTouchListener获取EVENT\u MOVE并使用事件 我已尝试使用重写的canScrollVertical()方法创建自定义GridLayoutManager: o

我有一个巨大的
RecyclerView
GridLayoutManager
。 有时会显示少量项目,在这种情况下,我需要禁用滚动。只有在RecyclerView中显示的项目太多时才应启用滚动,因此需要滚动

为什么? 因为当用户在项目上单击足够快时,不会触发单击侦听器。用户不小心移动了一个RecyclerView。回收者的
onTouchListener
获取
EVENT\u MOVE
并使用事件

我已尝试使用重写的
canScrollVertical()
方法创建自定义GridLayoutManager:

override fun canScrollVertically(): Boolean {
    return super.canScrollVertically() && isScrollEnabled
}
我使用此功能检查RecyclerView是否可滚动:

fun RecyclerView.isScrollableVertically(): Boolean {
    return computeVerticalScrollRange() > height
}
然后,我更新IsCrollenable字段:

val isScrollableVertically = items_list.isScrollableVertically()
(category_items_list.layoutManager as CustomGridLayoutManager).setScrollEnabled(isScrollableVertically)
但是,即使有很多项要显示,
items\u list.isscrollablevertical()
也返回false


当有足够的空间放置所有物品时,我尝试了很多方法来禁用scroll,但我一天都没有找到一个合适的方法。
我将感谢任何帮助

在检查视图是否可滚动之前,请尝试启用滚动。 让我们看看
computeVerticalScrollRange
方法的实现(java)

@Override
public int computeVerticalScrollRange() {
    if (mLayout == null) {
        return 0;
    }
    return mLayout.canScrollVertically() ? mLayout.computeVerticalScrollRange(mState) : 0;
}
一旦您禁用了滚动,在您的情况下,您将始终获得零滚动范围。所以我认为这应该有帮助

// set 'isScrollEnabled' true    
(category_items_list.layoutManager as CustomGridLayoutManager).setScrollEnabled(true)

val isScrollableVertically = items_list.isScrollableVertically()
(category_items_list.layoutManager as CustomGridLayoutManager).setScrollEnabled(isScrollableVertically)

以下代码适用于我在Kotlin的工作:

recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrollStateChanged( recyclerView: RecyclerView, newState: Int) {
        super.onScrollStateChanged(recyclerView, newState)
            // recyclerView.layoutManager!!.childCount) returns the number of visible items
            if (data.size <= recyclerView.layoutManager!!.childCount)
                recyclerView.stopScroll()
            }
})
recyclerView.addOnScrollListener(对象:recyclerView.OnScrollListener(){
覆盖CrollStateChanged(recyclerView:recyclerView,newState:Int){
super.onScrollStateChanged(recyclerView、newState)
//recyclerView.layoutManager!!.childCount)返回可见项目的数量

如果(data.size非常感谢!我想补充一点,在我更新RecyclerView的数据集后,我更新setScrollerEnabled(),方法如下:
recycler\u view.post{/*滚动检查此处*/}