Bug日志(四)——Android 防止多次点击(另解决多个列表子项点击)

在用户使用  应用的时候,经常会出现点击过快且多次点击同一控件的情况,

一方面这是因为应用或手机当前有些卡顿,网络卡啥的

另一方面也可能是由于很多应用并没有设置按钮点击时的 selector 或者其它按钮响应方式(例如点击按钮时按钮放大,常见于游戏),导致用户误认为没有点击到当前按钮。(比如使用selector再点击后更换背景颜色,图片等等)

一.防止按钮多次点击

1.工具类:一般按钮的防止多次点击我使用的是自己封装的工具类;

public class AntiShakeUtils {

    private final static long INTERNAL_TIME = 2000;

    /**
     * 此点击事件是否无效。
     *
     * @param target 目标视图
     * @return true, 无效点击事件。
     * @see #isInvalidClick(View, long)
     */
    public static boolean isInvalidClick(@NonNull View target) {
        return isInvalidClick(target, INTERNAL_TIME);
    }

    /**
     * 此点击事件是否无效。
     *
     * @param target       目标视图
     * @param internalTime 内部时间。单位是毫秒。
     * @return true, 无效点击事件。
     */
    public static boolean isInvalidClick(@NonNull View target, @IntRange(from = 0) long internalTime) {
        long curTimeStamp = System.currentTimeMillis();
        long lastClickTimeStamp = 0;
        Object o = target.getTag(R.id.last_click_time);
        if (o == null) {
            target.setTag(R.id.last_click_time, curTimeStamp);
            return false;
        }
        lastClickTimeStamp = (Long) o;
        boolean isInvalid = curTimeStamp - lastClickTimeStamp < internalTime;
        if (!isInvalid)
            target.setTag(R.id.last_click_time, curTimeStamp);
        return isInvalid;
    }
}

如何调用:在用户使用提现功能时,为防止跳转多个页面,使用此方法,v代表着控件ID

 

2.常用工具类(这个是简化版的)


public class FastClickUtil {
    private static final int MIN_DELAY_TIME = 300;  // 两次点击间隔不能少于300ms
    private static long lastClickTime;
    /**
     * 判断是否多次点击
     * @return 是否快速点击
     */
    public static boolean isFastClick() {
        boolean flag = true;
        long currentClickTime = System.currentTimeMillis();
        if ((currentClickTime - lastClickTime) >= MIN_DELAY_TIME) {
            flag = false;
        }
        lastClickTime = currentClickTime;
        return flag;
    }
}

二、防止列表子项多个点击(多点触控)

在使用文章阅读功能时,由于是跳转html页面,在跳转过程的很短的过程中,可以点击其他子项,或者同时点击多个子项,会造成跳转了多篇文章,并且返回时,一个一个的返回,在使用一方法时,发现方法无效,于是使用了以下方法:

给控件加上  android:splitMotionEvents="false" 属性    完美解决

 

参考文献:https://www.freesion.com/article/464369753/    

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&岁月不待人&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值