2015-10-20 156 views
0

我有一個包含RecyclerView的片段。當我從別的地方回片段,我做如何獲取滾動的RecyclerView位置

if(null!=savedInstanceState) { 
    mScrollPosition = savedInstanceState.getInt(ITEM_POSITION); 
    mRecyclerView.scrollToPosition(mScrollPosition); 
} 

,但現在我不知道該怎麼把裏面onSaveInstanceState

@Override 
public void onSaveInstanceState(Bundle bundle){ 
    super.onSaveInstanceState(bundle); 
    Log.d(TAG, "onSaveInstanceState"); 
    mScrollPosition=mRecyclerView.getScrollPosition();//??? 
    bundle.putInt(NITEM_POSITION,mScrollPosition); 
} 

沒有mRecyclerView.getScrollPosition()

更新

測試事實證明,使用mRecyclerView.scrollToPosition不夠精細,保證流暢的用戶體驗之後。在物品視圖足夠高的情況下,scrollToPosition(ofFirstVisibleItem)可以離開。那麼是否有更好的解決方案呢?

回答

1

您可以從LayoutManager中獲取滾動條。例如:

mScrollPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); 

還要檢查這個答案How to save RecyclerView's scroll position using RecyclerView.State?

+0

雖然你有點回答了這個問題,它原來的假設是錯誤的。使用scrollToPosition實際上並不會將視圖返回到它留下的位置:如果項目足夠高,則用戶非常清楚該位置已經移動。那麼有沒有更好的方式來做到這一點,而不是使用適配器位置? – learner

+0

試試這個http://panavtec.me/retain-restore-recycler-view-scroll-position/ – HellCat2405

+0

非常感謝。它看起來完全像我所需要的,但我不知道在哪裏放什麼。對不起,但我是在那個級別:)。例如,代碼看起來不像我的片段。而且有很多部分。我知道這有點多,但你介意放哪裏放什麼?我相信這裏的其他人也會很感激。 – learner