RecyclerView中刷新数据并保持其滚动位置

直接上代码:

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);
	}
});

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值