2017-09-01 73 views
0

我怎么能检查回收视图滚动到其顶部(列表的开头),而无需使用findFirstCompletelyVisibleItemPosition检查RecyclerView是在上面滚动(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 
     } 
    }) 
+0

我注意到你用'pull-to-refresh'标记了,究竟是什么与此有关?如果我们知道更多细节,可能会有更好的解决方案。 –

+0

后面的问题是RecyclerView在SwipeRefreshLayout中。刷卡有时会刷新错误的位置。 I.E.当列表不在顶部时。所以我只允许在RecyclerView在顶部时刷新 – cesarsicas

+0

啊,我明白了。这很奇怪,在'RecyclerView'中我没有这个问题,但也许是那些较大的项目。 –

回答

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 
     } 
    } 
} 
+0

非常感谢!我唯一需要适应的是当RecyclerView的项目更新时,我必须用0重新启动“当前位置”的值。 – cesarsicas

相关问题