美文网首页
android快速点击打开两个相同界面的解决办法

android快速点击打开两个相同界面的解决办法

作者: 张磊_9c5e | 来源:发表于2019-01-08 11:03 被阅读0次

    一.第一种解决方法

    在父类activity中重写事件分发的方法dispatchTouchEvent()
    原理:
    当在activity中快速点击某个控件,时间间隔不超过300ms,此时activity拦截click事件,这是点击的view将得不到响应,代码如下:

    public  static final long DEFAULT_TIME = 300;
    @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                if (isFastDoubleClick()) {
                    return true;
                }
            }
            return super.dispatchTouchEvent(ev);
        }
    
    
        public boolean isFastDoubleClick() {
            long time = System.currentTimeMillis();
            long timeD = time - lastClickTime;
            lastClickTime = time;
            return timeD <= DEFAULT_TIME;
        }
    

    二.第二种解决方法

    1.写一个工具类:

    public class Utils {
    /**
         * @param target      防止多次点击的View
         * @param defaultTime 超时时间
         * @return
         */
        public static boolean isInvalidClick(@NonNull View target, @IntRange(from = 0) long defaultTime) {
            long curTimeStamp = System.currentTimeMillis();
            long lastClickTimeStamp = 0;
            Object o = target.getTag(R.id.invalid_click);
            if (o == null) {
                target.setTag(R.id.invalid_click, curTimeStamp);
                return false;
            }
            lastClickTimeStamp = (Long) o;
            boolean isInvalid = curTimeStamp - lastClickTimeStamp < defaultTime;
            if (!isInvalid) {
                target.setTag(R.id.invalid_click, curTimeStamp);
            }
            return isInvalid;
        }
    }
    
    

    2.在values下,新建一个ids.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item name="invalid_click" type="id" />
    </resources>
    

    3.在点击事件中调用:

    button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (Utils.isInvalidClick(v, 300))
                        return;
    
                    Toast.makeText(MainActivity.this, "hello world!", Toast.LENGTH_SHORT).show();
                }
            });
    

    相关文章

      网友评论

          本文标题:android快速点击打开两个相同界面的解决办法

          本文链接:https://www.haomeiwen.com/subject/evrvrqtx.html