【发布时间】:2016-05-11 15:02:51
【问题描述】:
我想在销毁或暂停应用程序后滚动到 recyclerview 的最后保存位置。我使用下面的代码来保存SharedPreferences中的相关位置和偏移量
@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);
}
如果我将偏移量设置为零,滚动完成没有任何问题(滚动到一个项目的顶部),但是当我设置一个偏移量时,recyclerview 滚动到另一个项目(不是最后保存的项目位置),即使应用延迟使用Handler().postDelayed。我应该注意,使用computeVerticalScrollOffset(),我得到的偏移量高达 73000,这意味着这个偏移量是相对于第一项(位置 0)。如何正确获取偏移量并滚动到具有正确偏移量的所需项目?提前谢谢你。
【问题讨论】:
标签: java android scroll android-recyclerview