2015-10-20 158 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