局部刷新
最近老项目中测试反馈多图拖拽删除的时候会导致item信息错乱,经过排查原来是这么写的
final int position = mDragHolder.getAdapterPosition();
mImgData.remove(position);
mImageAdapter.notifyContentItemRemoved(position);
notifyContentItemRemoved方法是自己又封装了一层,加上了header的数量,删除完一个item后,发现相应的position都没有改变,所以又加了以下代码
mImageAdapter.notifyContentItemRangeChanged(position, mImageAdapter.getItemCount());
当以为解决问题的时候,遇到了一个熟悉的错误ArrayIndexOutBoundsException, notifyContentItemRangeChanged第二个参数其实应该是getItemCount - position的count
mImgData.remove(position);
mImageAdapter.notifyContentItemRemoved(position);
mImageAdapter.notifyContentItemRangeChanged(position, mImageAdapter.getItemCount());
mImageAdapter.notifyContentItemRangeChanged(position, mImageAdapter.getItemCount() - position);
或者 mImageAdapter.notifyContentItemChanged(position);
notifyItemChanged方法最终调用的还是notifyItemRangeChanged方法。
刷新闪烁
如果使用以上刷新方法,可以设置 ((SimpleItemAnimator)mImageRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);取消RecyclerView的动画
问题解决!