5

有没有办法只注册一个按钮按下?目前在我的活动中,我有两个按钮,每个按钮都开始另一个活动 - 目前,如果我同时按下它们,两个活动开始,一个在另一个之上。我想防止这种情况发生,并且在任何给定时间只有一个或另一个运行。我曾想过禁用多点触控,但这对我来说有点骇人听闻。

编辑:我试过这样做:

public class MainActivity extends Activity {

    Button btn_send;
    Button btn_receive;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_send = (Button) findViewById(R.id.btn_send);
        btn_receive = (Button) findViewById(R.id.btn_receive);
        OnClickListener listener = new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (v.equals(btn_send)) {
                    if (isWifiConnected()) {
                        btn_receive.setClickable(false);
                        startActivity(new Intent(MainActivity.this,
                                SendActivity.class));
                    } else {
                        Toast.makeText(MainActivity.this,
                                "Wifi connection required", Toast.LENGTH_SHORT)
                                .show();
                    }
                } else if (v.equals(btn_receive)) {
                    if (isWifiConnected()) {
                        btn_send.setClickable(false);
                        startActivity(new Intent(MainActivity.this,
                                ReceiveActivity.class));
                    } else {
                        Toast.makeText(MainActivity.this,
                                "Wifi connection required", Toast.LENGTH_SHORT)
                                .show();
                    }
                }

            }

        };
        btn_send.setOnClickListener(listener);
        btn_receive.setOnClickListener(listener);
    }

    @Override
    public void onPause() {
        btn_send.setClickable(true);
        btn_receive.setClickable(true);
        super.onPause();
    }
}

我仍然可以在 Galaxy S2 GT-i9100 上同时按下两个按钮。

4

7 回答 7

8

android:splitMotionEvents="false" 用于按钮持有者

于 2014-02-07T09:34:31.660 回答
1

这对我有用

boolean hasRunOnce = false;
ImageButton clickExample1, clickExample2;

    clickExample1 = (ImageButton) findViewById(R.id.btnExample1);
    clickExample1.setOnClickListener(this);

    clickExample2 = (ImageButton) findViewById(R.id.btnExample2);
    clickExample2.setOnClickListener(this);


}

@Override
public void onClick(View v) {


    if (hasRunOnce == false) {
        hasRunOnce = true;  //Stop users clicking buttons simultaneously

        switch (v.getId()) {
        case R.id.btnExample1:
            //do stuff
            break;
        case R.id.btnExample2:
            //do stuff
            break;

        }
    }
}



@Override
protected void onResume() {
    hasRunOnce = false;

    super.onResume();
}

}

于 2013-11-29T16:06:49.170 回答
1

首先,创建一个类来处理触摸事件,如下所示:

public class SingleClickTouchListener implements OnTouchListener {
    private boolean mOneViewClicked = false;

    /**
     * Holds the clicked view. Only allow click in other views when this view is no longer clicked.
     */
    private Object mClickedView = null;

    @Override
    public boolean onTouch(View view, MotionEvent motionEvt) {
        boolean consumed = false;

        switch (motionEvt.getAction()) {
        case MotionEvent.ACTION_DOWN:
            if (!mOneViewClicked) {
                mClickedView = view;
                mOneViewClicked = true;
            } else {
                consumed = true;
            }
            break;
        case MotionEvent.ACTION_UP:
            if (mClickedView == view) {
                mOneViewClicked = false;
                consumed = false;
            } else {
                consumed = true;
            }
            break;
        default:
            // No action required.
            break;
        }

        return consumed;
    }
}

然后,创建这个类的一个实例:

private SingleClickTouchListener mSingleClickTouchListener = new SingleClickTouchListener();

现在将相同的实例传递给您不想同时按下的所有视图(或按钮)。

view1.setOnTouchListener(mSingleClickTouchListener);
view2.setOnTouchListener(mSingleClickTouchListener);
view3.setOnTouchListener(mSingleClickTouchListener);
于 2013-07-31T20:03:12.167 回答
1

为按钮注册相同的内容并在单击前者时onClickListener调用后者setEnabled ( false )

于 2013-05-16T09:52:33.643 回答
0

尝试这个

button1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                button2.setClickable(false);

                //launch first activity
            }
        });

button2.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                button1.setClickable(false);

                //launch second activity
            }
        });
于 2013-05-16T10:06:20.027 回答
0

使用相同的点击列表。即,为类实现 onClickListner 并为两个按钮实现 button.setOnClickListner(this)。

于 2013-05-16T09:53:37.853 回答
0

在你常见的 onclick-listener 中

if(oneClick){
   oneClick = false;
   //launch the activity
}

,并在 onPause 或任何适当的地方重置标志。

于 2013-05-16T09:58:23.127 回答