在Android开发过程中我们经常会碰到这样的问题,当用户点击一个View启动一个新的Activity的时候,如果快速地多次点击就会启动多个相同的界面。虽然说很少会有用户这么玩自己的手机,但是一旦出现这样的情况确实是很不好的体验。
解决方案一:
1,重写Android的OnClickListener 方法,判断两次点击事件间隔
public abstract class NoDoubleClickListener implements View.OnClickListener { final int MIN_CLICK_DELAY_TIME = 1000; private long lastClickTime = 0; @Override public void onClick(View v) { long currentTime = Calendar.getInstance().getTimeInMillis(); if(currentTime-lastClickTime>MIN_CLICK_DELAY_TIME){ lastClickTime = currentTime; onNoDoubleClick(v); return ; } } protected abstract void onNoDoubleClick(View v); }
使用时调用onNoDoubleClick(View v);
mShareLayout.setOnClickListener(new NoDoubleClickListener() { @Override protected void onNoDoubleClick(View v) { //TODO } });
方案二:
在你的baseActivity中重写dispatchTouchEvent(MotionEvent ev)方法
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (Utils.isFastDoubleClick()) { if(LogUtil.isDebug){ ToastUtil.show(this,"重复点击"); } return true; } return super.dispatchTouchEvent(ev); }
但是经过实践,方案二没有方案一好使public static boolean isFastDoubleClick() { long time = System.currentTimeMillis(); if(time-lastClickTime>1000){ lastClickTime = time; return false; }else { return true; } }
优缺点:
方案一是对某个点击事件做的处理,比较灵活
方案二是对整个工程界面做的处理,一劳永逸,但是容易与其他事件冲突,
建议使用方案一!