有关notifyItemRemoved(position)方法导致界面position错乱的解决办法

最近在项目中做侧滑删除的时候总是出现点击删除这个删除的却是那个,经过研究发现问题如下

拿recylerview来说吧,以下是错误代码

@Override
    public void onBindViewHolder(MyAdapter.MyHolder holder, final int position) {
        holder.text.setText(list.get(position));
        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onItemClick(v, position);
            }
        });
    }

我们在bind方法设置点击事件的监听器的时候,由于在匿名内部类中,所以position要变final,但是这样就会出问题,position随着bind方法在不停的绑定而改变,所以它不可以变final,其实studio是有提示的,它建议用holder.getAdapterPosition()方法,这就引入了第二种错误代码

@Override
    public void onBindViewHolder(MyAdapter.MyHolder holder,int position) {
        final int position1 = holder.getAdapterPosition();
        holder.text.setText(list.get(position));
        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onItemClick(v, position1);
            }
        });
    }

虽然上面用了holder.getAdapterPosition()方法,但是将得到的position又变final了,还是会使界面在删除的时候错乱,所以正确的代码如下

@Override
    public void onBindViewHolder(final MyAdapter.MyHolder holder, int position) {
        holder.text.setText(list.get(position));
        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onItemClick(v, holder.getAdapterPosition());
            }
        });
    }


将holder变final,在需要用position的地方用holder.getAdapterPosition()获取

好了,一点小经验与大家分享,希望每个人都能把自己踩过的坑写出来,让大家不必再踩同样的坑了

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值