检查 RecyclerView 是否在顶部滚动(findFirstCompletelyVisibleItemPosition 不起作用)

ces*_*cas 4 android kotlin pull-to-refresh android-recyclerview

如何在不使用的情况下检查回收器视图是否滚动到其顶部(列表的开头)findFirstCompletelyVisibleItemPosition

说明:我不能使用这个方法,因为上面的项目RecyclerView很大,有时永远不会“完全可见”,所以该方法会返回-1( RecyclerView.NO_POSITION)

我需要知道这一点才能仅在回收站视图到达其顶部时才触发操作。

 val manager = timelineRecyclerView?.layoutManager as StaggeredGridLayoutManager
 val visibles = manager.findFirstCompletelyVisibleItemPositions(null)
Run Code Online (Sandbox Code Playgroud)

已解决:包括一些帮助代码

    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
        }
    })
Run Code Online (Sandbox Code Playgroud)

Adv*_*Dog 8

您可以创建一个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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)