查看原文
其他

安卓防连点的一个极简操作

(给安卓开发精选加星标)

转自:掘金 jsonz1261

https://juejin.cn/post/6937847983576875038

  1. 直接上代码

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);
        });
    }
}
  1. 使用方式

注意:此调用方式使用时并没有比原有view.setOnClickListener方式更加复杂。他甚至以更简单的方式来实现了防快速点击的效果。

//参数1,防连点的view  参数2,点击此view要执行的OnClickListener
ClickUtils.fastClickChecked(tvHeadLevel,v->goGrowGrade());

只需要传进view和监听,即可完成防连点效果。

  1. 原理

此处我是通过代理原view的点击,在原来view点击时,我采用先吧此view的clickable=false,然后通过view.postDelayed方法过500秒后再把它置为可以点击,这样就可以避免在小米华为手机上的连点时跳转页面的情况下连续跳转多个页面了。

  1. 写此工具类的一个原因

其实写此工具类一个最根本的原因是,在安卓系统的有些手机上,快速点击程序的一些view进行跳转时会造成打开两个目标view的情况。而关于程序放连点我们实践过多种方式。但是通过尝试,有些方法不是使用繁琐,就是增加其他成本。例如gradle插件的方式会增加编译成本,使我们build软件时运行缓慢。增加编译时常,又比如rxJava的方式使用起来感觉过于繁琐。需要我们写的代码量太多,或者说运用两次时间间隔的方式通过动态点击计算是否触发事件,这种方式又太过复杂。所以我自己运用clickable方式写了一个原理简单且使用方便的工具类。


- EOF -


推荐阅读  点击标题可跳转

1、Jetpack Compose竟能写出如此炫酷的倒计时APP!

2、Flutter 2.0 来了!成为跨平台开发终极之选

3、带你全面了解 Flutter,它好在哪里?它的坑在哪里?应该怎么学?


看完本文有收获?请分享给更多人

 推荐关注「安卓开发精选」,提升安卓开发技术

点赞和在看就是最大的支持❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存