使用recyclerView的notifyItemRemoved()和remove数据的时候出现的
2017-09-09 10:53
686 查看
在项目当中使用了recyclerView进行sdcard指定路径下面图片的展示,其中参考了鸿洋大神的demo,但是那个gallery的demo里面没有实现长按事件的监听,我在里面加入了长按事件,然后通过dialog提示用户是否删除选中的图片,大致意思如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/ee197e646e91892634356fc1a2a0f603)
但是,在使用notifyItemRemoved(position)的时候出现了问题,也就是网上大多数的人都遇到的问题,position错乱,导致remov之后的数组越界,程序崩溃.当时看到这个问题,也明白,因为在使用listView的时候就遇到过了,但是这个问题居然改了大半天,因为开始按照大部分网友分享的方法来,比如remove之后,使用notifItemRemoved来实现动画效果之后再通过
来重新bindviewholder,但是我发现还是会出现问题,当更新之后就出现了data的错乱,导致图片和新的位置对不上,但是,如果不使用notifdataremoved的话,就没有动画效果了,最后发现是在adapter传递到Activity的时候,position的问题,开始的时候直接传递了
里面的i过去,结果就出现了这样的问题,后面通过获得viewHolder的position传递:
然后在activity里面的dialog里面写就好了:
另外,在之前测试过,不将长按事件传递到Activity,在onbindviewholder里面获得i作为position,慢慢的删除还OK,但是快速连续删除也是会出现问题,网上有一个使用子线程来处理的,似乎很OK,但自己没有测试过(http://blog.csdn.net/iamdingruihaha/article/details/73274010)
但是,在使用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)
相关文章推荐
- Android RecyclerView使用notifyItemRemoved()移除数据时数据错乱
- recyclerView.notifyItemRemoved数据索引混乱
- 使用RecyclerView notifyItemChanged()出现图片闪烁问题解决
- RecyclerView如何使用正确notifyItemRemoved
- Android RecyclerView 加载更多数据 及 不同类型itemView的使用
- RecyclerView通过notifyItemChanged方法更新item数据避免闪烁
- RecyclerView关于notifyItemRemoved的那点小事
- RecyclerView使用,RecyclerView使用,增加一个item,删除一个item,更新数据,item点击事件
- 解决RecycleView Adapter使用notifyItemRemoved造成Position混乱的问题。
- RecyclerView.Adapter notifyItemRemoved postion错位的问题
- RecyclerView的notifyItemRemoved()方法删除条目问题
- Android之使用RecyclerView出现脏数据解决
- glmis项目工作日志4_解决RecyclerView中使用CheckBox时出现数据错乱的问题。
- RecyclerView关于notifyItemRemoved的那点小事!
- RecyclerView使用databinding出现数据闪烁问题
- 《android编程权威指南》RecyclerView的notifyItemChanged()方法使用
- RecyclerView.Adapter关于notifyItemInserted等数据错位问题
- 在使用Imagepicker时候,点击recyclerView的item,进入删除界面,返回结果为空的问题
- 解决RecyclerView中使用UIL加载网络图片,在刷新时出现闪烁问题
- 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误