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{/*滚动检查此处*/}