adapter.notifyDataSetChanged();可以重调onBindViewHolder但是无动画,
adapter.notifyItemRemoved(position);
adapter.notifyItemRangeChanged(position,uris.size());
这两个方法配合使用带动画,但是存在的问题就是动画过程中再次点击View,
就会数组越界,闪退。
解决方法之1.新建一个线程,并且sleep300毫秒,谷歌官方remove动画时间为250,
但是sleep250有时候还会闪退。
声明一个全局变量boolean
private static boolean isDeleteAble =true;//当前为可删除状态
if (isDeleteAble) {
isDeleteAble =false;
uris.remove(position);
adapter.notifyItemRemoved(position);
adapter.notifyItemRangeChanged(position,uris.size());
new Thread(() -> {
try {
Thread.sleep(300);
}catch (InterruptedException e) {
e.printStackTrace();
}
isDeleteAble =true;
}
).start();
}
这种方法看到有大佬说太麻烦,解决方法2为去抖动,
// 两次点击按钮之间的点击间隔不能少于1000毫秒
private static final int MIN_CLICK_DELAY_TIME = 1000;
private static long lastClickTime;
public static boolean isFastClick() {
boolean flag = false;
long curClickTime = System.currentTimeMillis();
if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
flag = true;
}
lastClickTime = curClickTime;
return flag;
}
ps:转自简书,仅为方便个人使用