您的位置:首页 > 移动开发 > Android开发

同时点击buttons

2016-03-22 11:14 555 查看

一、问题再现

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android