2015-10-25 54 views
8

RecyclerView.scrollToPosition()是非常奇怪的。 例如,假設一個名爲"rv"RecyclerView如何使用RecyclerView.scrollToPosition()將位置移動到當前視圖的頂部?

  1. 如果現在項目10是在當前RecyclerView,叫rv.scrollToPosition(10),該RecyclerView將滾動項目10至底部。

  2. 如果現在項目10在當前RecyclerView中,則調用rv.scrollToPosition(10),將不會有任何滾動,將不會執行任何操作。

  3. 如果現在項目10位於當前RecyclerView的頂部,請致電rv.scrollToPosition(10)RecyclerView將滾動項目10頂部。

爲了幫助理解,請看這picture

但我需要的是,只要我打電話,RecyclerView就會將假定的位置滾動到當前視圖的頂部,就像情況3一樣。怎麼做?

+1

http://stackoverflow.com/questions/26875061/scroll-recyclerview-to-show-selected-item-on-top – USKMobility

+0

這是正是我想要的!非常感謝你!嗯...我想我應該刪除我的問題... – cryyyyy

+0

使用linearLayoutManager.scrollToPositionWithOffset(2,20); 參見[滾動RecyclerView顯示在上面選擇的項目(http://stackoverflow.com/questions/26875061/scroll-recyclerview-to-show-selected-item-on-top) –

回答

21

如果我理解這個問題,你要滾動到一個特定的位置,但這個位置是適配器的位置,而不是RecyclerView的項目位置。

只能通過LayoutManager實現這一目標。

做這樣的事情:

rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter). 
+0

如何通過AdapterPosition本方法? – Bot

+1

我確定這是不正確的。在RecyclerView上調用scrollToPosition只是在LayoutManager上調用相同的方法。它甚至說,在的javadoc「RecyclerView沒有實現滾動邏輯,而是將呼叫轉android.support.v7.widget.RecyclerView.LayoutManager#scrollToPosition 調用scrollToPosition在RecyclerView或佈局管理將有完全相同的效果。 –

1

下面的鏈接可能會解決你的問題:

https://stackoverflow.com/a/43505830/4849554

只需創建與愛好STAP_TO_START一個SmoothScroller:

RecyclerView.SmoothScroller smoothScroller = new 
LinearSmoothScroller(context) { 
    @Override protected int getVerticalSnapPreference() { 
     return LinearSmoothScroller.SNAP_TO_START; 
    } 
}; 

現在你設置您想要滾動到的位置:

smoothScroller.setTargetPosition(position); 

並傳遞SmoothScroller給LayoutManager:

layoutManager.startSmoothScroll(smoothScroller); 
+0

沒關係,如果你想做一個平滑的滾動,但如果你想做一個自動滾動? – 4gus71n

+0

如果你想自動向下滾動到某個位置,在這種情況下,這個代碼將工作完美。它會自動向下滾動到平穩過渡的某個位置......我希望我的問題得到了解決。 – Ritesh

+2

問題是我的RecyclerView有700個項目,所以如果到目標滾動的距離<30,那麼我使用平滑滾動,並且此代碼完美工作。但如果到目標滾動的距離> 30,我想自動跳轉到該項目。在這種情況下,我不想使用平滑滾動。我如何「快速啓動」該項目? – 4gus71n

相關問題