移除RecyclerView中的一个item遇到的坑

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:转自简书,仅为方便个人使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

友情链接更多精彩内容