【Android】关于连续多次点击控件的控制方案(新建监听类)

参考:防止Android过快点击造成多次事件的三种方法_胖胖的博客-CSDN博客

实现逻辑很简单:

    • 设置限定时间
    • 在用户点击时开始计时
    • 若计时未超过限定时间,则不允许触发点击事件

因还未学习过Rxjava,因此使用类似文中的第二种进行实现

完成后发现一个小问题:当多个控件绑定一个 Listener 时,点击 控件A 后会对 控件B 也会造成点击限制;初步设想在自定义Listener类的时候多加一个对ID的判断,这样的话要另外设计一个能储存ID和限定时间的数据结构了。

 

in OnMultiClickListener.java:

public abstract class OnMultiClickListener implements View.OnClickListener {
    // 两次点击按钮之间的点击间隔不能少于指定时间
    private static final int MIN_CLICK_DELAY_TIME = 5000;
    private static long lastClickTime;

    public abstract void onMultiClick(View v);

    @Override
    public void onClick(View v) {
        long curClickTime = System.currentTimeMillis();
        if((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
            // 超过点击间隔后再将lastClickTime重置为当前点击时间
            lastClickTime = curClickTime;
            onMultiClick(v);
        }
    }

}

 

使用(使用的类不用继承任何接口了):

    public void initView() {
        Button listBtn = findViewById(R.id.btn_toListView);
        Button testBtn = findViewById(R.id.btn_test);

        listBtn.setOnClickListener(multiClickListener);
        testBtn.setOnClickListener(multiClickListener);
    }
    OnMultiClickListener multiClickListener = new OnMultiClickListener() {
        @Override
        public void onMultiClick(View v) {
            switch (v.getId()) {
                case R.id.btn_toListView:
                    Toast.makeText(mContext, "點擊 btn_toListView", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_test:
                    Toast.makeText(mContext, "點擊 btn_test", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    throw new IllegalStateException("Unexpected value: " + v.getId());
            }
        }
    };

 

posted @ 2021-01-21 21:59  阿丢  阅读(354)  评论(0编辑  收藏  举报