一、问题再现
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = getContext();
setButtonsEnabled(false);
Log.e("click", "id:" + v.getId());
switch (v.getId()) {
case R.id.button1:
context.startActivity(XXX);
break;
case R.id.button2:
context.startActivity(XXX));
break;
}
}
};
// button1.performClick();
// button2.performClick();
// cannot reproduce the problem, performClick will call onClick immediately.
虽然在listener里设置了setEnabled(false)但是当点击非常快的时候,是无法保证的。因为click的event已经被送入了queue中。决定这个的不是onclick调用的快慢,而是点击的快慢。
之前利用setEnabled的做法在6.0+以上的device上测试过没有问题,但是在4.2.2上面测试没有通过。
需要研究下event的dispatch。
二、另一种单event的模式
android:splitMotionEvents="false"
在buttons的父view中设置以上的属性就可以让他的所有子view在同一时间只能接受一个event。就避免了同时点击buttons的问题。
http://developer.android.com/intl/ja/about/versions/android-3.0.html
http://y-anz-m.blogspot.jp/2011/02/android-30-platform-3.html