您的位置:首页 > 其它

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

2017-09-09 10:53 686 查看
    在项目当中使用了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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐