Android 点击按钮时防止重复触发点击事件

       最近测试同学频繁提出一个bug,当对某个可执行按钮进行快速点击时,会触发多次点击效果,如多次刷新数据、多次跳转同一页面,极为影响用户体验。

       其实问题本身很简单,多为进行了一些轻微耗时操作,如请求了接口,在接口异步请求未完全响应时再次发出请求(点赞、收藏等功能),又或者需要接口的某些数据来进行一些常规页面跳转动作等。简单和测试同学沟通了下,最为理想的状态时2秒内给出用户反馈,因此我对点击事件的延迟时间默认设置为2秒,如果接口响应速度巨慢或者逻辑极为复杂建议使用加载dialog来提示用户。

工具类代码:

/**
 * @author YDS
 * @date 2020/8/18
 * @discribe multi click
 */
class MultiClickUtil {
    private static int DELAY_TIME = 2000;                 //点击间隔延迟2000毫秒

    private static boolean isCanClick = true;             //是否允许点击
    private static long lastClickTime = 0;                //上一次点击时间戳

    /**
     * 点击按钮事件
     *
     * @param listener
     */
    public static void clickButton(OnClickListener listener) {
        //获取两次点击事件得时间差
        long timeDifference = System.currentTimeMillis() - lastClickTime;
        //如果时间差大于我们设定的点击间隔时间,则允许用户点击
        if (timeDifference > DELAY_TIME) {
            isCanClick = true;
        } else {
            isCanClick = false;
        }
        if (isCanClick) {
            lastClickTime = System.currentTimeMillis();
            listener.onClick();
        }
    }

    /**
     * 允许点击事件回调
     */
    interface OnClickListener {
        void onClick();
    }
}

调用代码:

bt_intent.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        MultiClickUtil.clickButton(new MultiClickUtil.OnClickListener() {
            @Override
            public void onClick() {
                ++clickNum;
                Toast.makeText(MainActivity.this, "第" + clickNum + "次点击", Toast.LENGTH_SHORT).show();
            }
        });
    }
});

 

 


版权声明:本文为Simon_YDS原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。