使用Recyclerview的getChildAt(position)方法获取可见第一条的view,总是null;
使用LinearLayoutManager的findViewByPosition(position)方法解决此问题。
使用LinearLayoutManager的scrollToPositionWithOffset(position,offset)来定位到指定位置。
public void savePositionState(){ int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); mPositionState[0] = firstVisibleItemPosition; // View view = mRecyclerView.getChildAt(firstVisibleItemPosition); View view = mLinearLayoutManager.findViewByPosition(firstVisibleItemPosition); if (view != null) { int top = view.getTop(); mPositionState[1] = top; } DebugLog.d(TAG,"InfoStream_savePositionState mPositionState[0]:"+mPositionState[0]+" mPositionState[1]:"+mPositionState[1]); } public void restorePosistionState(){ DebugLog.d(TAG,"InfoStream_restorePosistionState mPositionState[0]:"+mPositionState[0]+" mPositionState[1]:"+mPositionState[1]); mLinearLayoutManager.scrollToPositionWithOffset(mPositionState[0], mPositionState[1]); mFirstCompletelyVisibleItemPosition = mLinearLayoutManager.findFirstCompletelyVisibleItemPosition(); }