直接上代码:
private int lastPosition = 0;
private int lastOffset = 0;
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
// 记录位置
// 获取可视的第一个view
View topView = mLinearLayoutManager.getChildAt(0);
// 获取与该view的顶部的偏移量
lastOffset = topView.getTop();
// 得到该View的数组位置
lastPosition = mLinearLayoutManager.getPosition(topView);
}
});
// 在列表数据加完完成后,执行此方法,对数据进行操作
mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 利用线程
mRecyclerView.post(() -> {
// 这样更精确
((LinearLayoutManager) mLinearLayoutManager).scrollToPositionWithOffset(lastPosition, lastOffset);
});
mRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
|