同时点击buttons

一、问题再现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值