RecyclerView notifyItemRemoved IllegalStateException解决方案

项目中,我在列表的长按删除调用notifyItemRemoved方法时遇到了IllegalStateException,一开始按照网上的解决方案,在notifyItemRemoved()后调用notifyItemRangeChanged(),但是不行

            mDataList.remove(i);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, mDataList.size() - position);

通过调试发现出现问题时recyclerView.isComputingLayout() 一直是true,即使用postDelayed(100)来递归延时调用还是一直处于isComputingLayout()==true ,而且延迟处理也不是我希望的解决方式,但是不加notifyItemRangeChanged,又会出现大家经常遇到的删除错乱,改用notifyDataSetChanged()取消动画效果我更不甘心,于是开始考虑在不执行notifyItemRangeChanged()的情况下删除正确item的解决方式。
于是我尝试把ViewHolder的AdapterPosition传给notifyItemRemoved(),以保证删除的是执行长按的item,同时不根据索引,而是直接传入itemData对象来删除目标数据,来解决删除错乱。

       if (mDataList.remove(data)) {
           notifyItemRemoved(position);
       }

经过测试,很好的解决了IllegalStateException异常,也不会出现删除错乱的问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 神秘的抚仙湖 秋水长天 早就听闻抚仙湖的美名,却一直无缘见识其真面目。今年暑...
    秋水长天_42b2阅读 1,070评论 5 8
  • 月圆九度,金风落叶。 十月卅日,秋意正浓。 生三十年,而立。 叹日月如梭,效逐日之夸父难追过隙之白驹。 吾七岁,入...
    小庄大少阅读 238评论 0 1
  • 来自湖北的小宝来公司两个月,在下楼梯时,由于地面有水滑到,导致右腿骨折。代表公司工会委员会,陪同领导一起去慰问。 ...
    许的阅读 245评论 0 1
  • [__NSCFString charValue] 今天把项目运行在4s上面出了一个问题,一个model对象有一个B...
    Z_JaDe阅读 916评论 2 0