5

1 回のボタン押しのみを登録する方法はありますか? 私の活動の瞬間に、私はそれぞれが別の活動を開始する2つのボタンを持っています。私はこれを防ぎたいと思っており、常に一方または他方のみを実行しています。マルチタッチを無効にすることを考えましたが、それはちょっとハックな気がします。

編集:私はこれをやろうとしました:

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

1

onClickListenerボタンの両方に同じものを登録しsetEnabled ( false )、前者がクリックされたときに後者を呼び出します

于 2013-05-16T09:52:33.643 に答える
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 に答える
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

use same click listner. ie, implement onClickListner for the class and button.setOnClickListner(this) for both the buttons.

于 2013-05-16T09:53:37.853 に答える
0

一般的な onclick-listener の内部

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

、および onPause または適切な場所でフラグをリセットします。

于 2013-05-16T09:58:23.127 に答える