检查RecyclerView是否滚动(findFirstCompletelyVisibleItemPosition不起作用)
我如何检查回收站视图是否滚动到其顶部 (列表的开始),而不使用findFirstCompletelyVisibleItemPosition
?
说明:我不能使用这种方法,因为RecyclerView
上的项目很大,有时永远不会“完全可见”,所以方法将返回-1( RecyclerView.NO_POSITION
)
我只需要知道这一点,只有当回收站视图达到顶峰时才会触发一个动作。
val manager = timelineRecyclerView?.layoutManager as StaggeredGridLayoutManager val visibles = manager.findFirstCompletelyVisibleItemPositions(null)
解决:包括一些代码来帮助
timelineRecyclerView.addOnScrollListener(object:RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView:RecyclerView, newState:Int) { super.onScrollStateChanged(recyclerView, newState) } override fun onScrolled(recyclerView:RecyclerView, dx:Int, dy:Int) { super.onScrolled(recyclerView, dx, dy) currentTimelinePosition += dy Log.wtf("position", currentTimelinePosition.toString()) //if the timeline position is on its start, allow swipe and refresh swipeLayout.isEnabled = currentTimelinePosition == 0 } })
你可以创建一个RecyclerView.OnScrollListener
,并跟踪它滚动了多少。
例如,您只需保留一个变量,然后根据垂直滚动量使用onScroll对其进行更新。
class MyScrollListener() : RecyclerView.OnScrollListener() { var currentScrollPosition = 0 override fun onScrolled(view: RecyclerView, dx: Int, dy: Int) { currentScrollPosition += dy if( currentScrollPosition == 0 ) { // We're at the top } } }