使用recyclerView的notifyItemRemoved()和remove数据的时候出现的

    在项目当中使用了recyclerView进行sdcard指定路径下面图片的展示,其中参考了鸿洋大神的demo,但是那个gallery的demo里面没有实现长按事件的监听,我在里面加入了长按事件,然后通过dialog提示用户是否删除选中的图片,大致意思如下:


    但是,在使用notifyItemRemoved(position)的时候出现了问题,也就是网上大多数的人都遇到的问题,position错乱,导致remov之后的数组越界,程序崩溃.当时看到这个问题,也明白,因为在使用listView的时候就遇到过了,但是这个问题居然改了大半天,因为开始按照大部分网友分享的方法来,比如remove之后,使用notifItemRemoved来实现动画效果之后再通过

////                if (i != mDatas.size()){
////                  notifyItemRangeChanged(i, mDatas.size()-i);
////               }

来重新bindviewholder,但是我发现还是会出现问题,当更新之后就出现了data的错乱,导致图片和新的位置对不上,但是,如果不使用notifdataremoved的话,就没有动画效果了,最后发现是在adapter传递到Activity的时候,position的问题,开始的时候直接传递了

public void onBindViewHolder(final ViewHolder viewHolder, final int i)

里面的i过去,结果就出现了这样的问题,后面通过获得viewHolder的position传递:

int position = viewHolder.getPosition();

然后在activity里面的dialog里面写就好了:

		imageList.remove(position);
                mAdapter.notifyItemRemoved(position);
                mAdapter.notifyItemRangeChanged(0, mAdapter.mDatas.size());
   另外,在之前测试过,不将长按事件传递到Activity,在onbindviewholder里面获得i作为position,慢慢的删除还OK,但是快速连续删除也是会出现问题,网上有一个使用子线程来处理的,似乎很OK,但自己没有测试过( http://blog.csdn.net/iamdingruihaha/article/details/73274010)




猜你喜欢

转载自blog.csdn.net/zhaoqi2617/article/details/77907727