2017-09-01 107 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

相關問題