0

(Android 3.2)9つのボタンがあるTableLayoutがあります。それらのいずれかがプレスされていないとき、つまり、プレスが完了したとき、つまりACTION_UPを知りたいです。どのボタンを押してもかまいません。押したボタンがいつ離されたかを知りたいだけです。

Android :: onClickがあるように、XMLにAndroid :: onTouchがあることを期待していました。そして、それらすべてを1つのonTouchイベントハンドラーに向けて、ACTION_UPを探すことができました。しかし、ありません。私は9つの別々のOnTouchListenersを書かないようにしています。

助言がありますか?

前もって感謝します。

4

3 に答える 3

2

ここに示すように、コードからonTouchListenerを追加して、実際にACTION_UPがあるときにやりたいことを実行してみませんか

于 2012-04-20T21:47:00.827 に答える
2

単一のリスナーを作成しないのはなぜですか。

OnTouchListener listener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Button b = (Button) v; // the button that just gets released
        if (event.getAction() == MotionEvent.ACTION_UP) {
            ...
        }
    }
});

ループを使用してすべてのボタンに接続します。

Button buttons[] = {...};
for (Button b : buttons) {
    b.setOnTouchListener(listener);
}

または代わりに:

int button_ids[] = {R.id.button1, R.id.button2, R.id.button3, ...};
for (int id : button_ids) {
    ((Button) findViewById(id)).setOnTouchListener(listener);
}
于 2012-04-20T21:50:43.390 に答える
2

XMLではなく、プログラムで各ビューを単一のonTouchリスナーに割り当てることができます。

1人のリスナーを作成します。

private View.OnTouchListener myListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        // Your logic            
        return false;
    }
};

次に、それを各ボタンに追加します。

findViewById(R.id.btn1).setOnTouchListner(myListener);
findViewById(R.id.btn2).setOnTouchListner(myListener);

最適には、これらのボタンをxmlから参照する代わりにプログラムで作成して、ループでこれを行うか、1つのViewGroupに入れてその子を反復処理し、その方法でリスナーを追加することができます。

于 2012-04-20T21:51:54.780 に答える