2012-04-20 11 views
0

(Android 3.2)私は9つのボタンを持つTableLayoutを持っています。いずれかが押されていないとき、つまりプレスが完了したとき、つまりACTION_UPを知りたい。私はどのボタンを気にしなくても、押されたボタンが放されたばかりのことを知りたいだけです。レイアウト内のボタンが押されていないことを知らせる方法はありません

Android :: onTouchがXMLにあり、Android :: onClickのようにがあると思いますが、onTouchイベントハンドラでACTION_UPを探すことができます。しかし、そこにはありません。私は9つの別々のOnTouchListenersを書くのを避けようとしています。

提案がありますか?

ありがとうございます。 hereを見られるように

答えて

2

なぜあなたは、あなたがACTION_UPを持っている時にやりたい、実際のコードからonTouchListenerを追加していない

+0

あなたのクラスにはタッチリスナーが1つしかなく、9つのボタンすべてにリスナーが追加されます –

+0

誰もが正しいアイデアを持っていますが、ガビが最初にそれを持っていましたので、正解と+1を付けました。ありがとう! – user316117

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); 
} 

又は代替:

ループを使用して、すべてのボタンにアタッチ0
int button_ids[] = {R.id.button1, R.id.button2, R.id.button3, ...}; 
for (int id : button_ids) { 
    ((Button) findViewById(id)).setOnTouchListener(listener); 
} 
2

XMLではなく、プログラムで1つの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); 

あなたがループでこれを行う、または可能性1のViewGroupにそれらを入れて、その子ものの反復処理し、リスナーをそのように追加できるように最適には、XMLからそれらを参照するプログラムではなく、これらのボタンを作成することができます。

関連する問題