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

Android 检查RecyclerView是否在顶部滚动(findFirstCompletelyVisibleItemPosition将不起作用),android,android-recyclerview,kotlin,pull-to-refresh,Android,Android Recyclerview,Kotlin,Pull To Refresh,如果不使用findFirstCompletelyVisibleItemPosition,如何检查回收器视图是否已滚动到其顶部(列表的开头) 说明:我无法使用此方法,因为RecyclerView上的项目很大,有时永远不会“完全可见”,因此该方法将返回-1(RecyclerView.NO_POSITION) 我需要知道这一点,只有当“回收者”视图达到其顶部时,才能启动操作 val manager = timelineRecyclerView?.layoutManager as StaggeredG

如果不使用
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
        }
    }
}

我注意到您标记了
拉刷新
,这与此有什么关系?如果我们了解更多细节,可能会有更好的解决方案。背后的问题是RecyclerView位于SwiperFreshLayout内。刷卡有时会刷新到错误的位置。即当列表不在顶部时。所以我知道,只有当RecyclerView在topAh上时,我才允许刷新。这很奇怪,我在
RecyclerView
中没有这个问题,但可能是那些较大的项目。正如我发现的,这个错误曾经发生在旧的支持版本()中,并且已经修复。也许这是因为我使用了交错的布局。Idk,谢谢!非常感谢你!我唯一需要调整的是,当更新RecyclerView的项目时,我必须用0重新启动“当前位置”的值。