安卓防连点的一个极简操作
开发者全社区
共 1771字,需浏览 4分钟
·
2021-03-27 13:40
转自:掘金 jsonz1261
https://juejin.cn/post/6937847983576875038
直接上代码
import android.view.View;
public class ClickUtils {
public static void fastClickChecked(View v, View.OnClickListener listener){
if(v==null)return;
v.setOnClickListener(v1 -> {
listener.onClick(v1);
v1.setClickable(false);
v.postDelayed(() -> {
v.setClickable(true);
}, 500);
});
}
}
使用方式
注意:此调用方式使用时并没有比原有view.setOnClickListener方式更加复杂。他甚至以更简单的方式来实现了防快速点击的效果。
//参数1,防连点的view 参数2,点击此view要执行的OnClickListener
ClickUtils.fastClickChecked(tvHeadLevel,v->goGrowGrade());
只需要传进view和监听,即可完成防连点效果。
原理
此处我是通过代理原view的点击,在原来view点击时,我采用先吧此view的clickable=false,然后通过view.postDelayed方法过500秒后再把它置为可以点击,这样就可以避免在小米华为手机上的连点时跳转页面的情况下连续跳转多个页面了。
写此工具类的一个原因
其实写此工具类一个最根本的原因是,在安卓系统的有些手机上,快速点击程序的一些view进行跳转时会造成打开两个目标view的情况。而关于程序放连点我们实践过多种方式。但是通过尝试,有些方法不是使用繁琐,就是增加其他成本。例如gradle插件的方式会增加编译成本,使我们build软件时运行缓慢。增加编译时常,又比如rxJava的方式使用起来感觉过于繁琐。需要我们写的代码量太多,或者说运用两次时间间隔的方式通过动态点击计算是否触发事件,这种方式又太过复杂。所以我自己运用clickable方式写了一个原理简单且使用方便的工具类。
评论