2016-05-11 13 views
0

アプリを破棄または一時停止した後に、recyclerviewの最後に保存された位置にスクロールします。私は、関連する位置を保存するためのコードの下に使用し、SharedPreferencesrecyclerviewの最後の位置にスクロール

@Override 
public void onPause() { 
    super.onPause(); 
    QueryPreferences.setLastPos(getActivity(), String.valueOf(((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition())); 
    QueryPreferences.setLastOffset(getActivity(), String.valueOf(mRecyclerView.computeVerticalScrollOffset())); 
} 

とコードの下にオフセット位置を取得するため、オフセット、その後recyclerviewの最後の位置にスクロールしている:私はに等しいオフセットを設定した場合

@Override 
public void onResume() { 
    super.onResume(); 
    updateUI();//initialization of recyclerview and adapter 
    //final int scrllPosition=Integer.parseInt(QueryPreferences.getLastPos(getActivity())); 
    final int scrllOffset=Integer.parseInt(QueryPreferences.getLastOffset(getActivity())); 
    mLayoutManager.scrollToPositionWithOffset(0,-scrllOffset);//scrolling down 
    //I also tried mRecyclerView.scrollBy(0, scrllOffset); 
} 

スクロールは問題なくスクロールされますが、オフセットを設定すると、Handler().postDelayedを使用して遅延を適用しても、recyclerviewは別のアイテム(最後に保存されたアイテムの位置ではありません)にスクロールします。私はcomputeVerticalScrollOffset()を使用することに注意してください、私はこのオフセットが最初の項目(位置0)に相対的であることを意味する73000の大きさのオフセットを得ました。正しくオフセットを取得し、正しいオフセットで目的の項目にスクロールするにはどうすればよいですか?前もって感謝します。

答えて

0

LayoutManager &を設定し、以下のコードを使用して特定の位置にスクロールします。

ちょうどsetStackFromEnd=trueまたはsetReverseLayout=trueに設定すると、LLMは最後から項目をレイアウトします。

mLinearLayoutManager = new LinearLayoutManager(this); 
mLinearLayoutManager.scrollToPosition(yourList.size()); 

// yourListは、RecyclerViewアダプタに渡すArrayListです。

+0

ありがとうございました@Maheshwar Ligade。 onCreateViewでLayoutManagerを設定しました。 scrollToPosition(int pos)は特定の位置の上にスクロールし、上からのオフセットはそれを使用することによって無視されます。 –

+0

私の回答を更新しました –

+0

'yourList.size()'から1を引くべきだと思います(これは私の考えではありませんでした)[Goodlife](http://stackoverflow.com/users/5063320/goodlife)編集、私はちょうど答えを投稿していない人からの編集に属するとは思わなかった)。 –

関連する問題