RecyclerView添加和删除操作notifyDataSetChanged依旧会导致item混乱的解决办法

本文记录了一位开发者在RecyclerView中遇到的item位置混乱问题,尤其是在执行添加和删除操作后。问题源于onBindViewHolder的position未实时更新,通过在onClick方法内正确调用相关方法解决了这一问题。推荐使用notifyItemInserted/notifyItemRemoved配合notifyItemRangeChanged,以实现动画效果并减少不必要的刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个自己犯的蠢问题


@Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        final int pos = position;
 
        if(!holder.add.hasOnClickListeners()){
            holder.add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    infoList.add(pos,new TeacherChangeGradeInfo());
                    Log.e("add POS:",pos+",size:"+infoList.size());
                    notifyItemInserted(pos);//通知演示插入动画
                    notifyItemRangeChanged(pos,infoList.size()-pos);//通知数据与界面重新绑定
                }
            });

            holder.delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    infoList.remove(pos);
                    Log.e("delete POS:",pos+",size:"+infoList.size());
                    notifyDataSetChanged();
//       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值