public void onClick(View v)
{
if (v.getId()== R.id.but1 && v.getId()== R.id.but2)
{
Intent intent=new Intent(First.this,Second.class);
startActivity(intent);
}
}
1 に答える
1
2 つのコントロールに関連付けることができるようなイベントはありません。イベント ハンドラーは 1 つのコントロールにのみ関連付けられており、同じリスナーを 2 つのボタンに割り当てるのとは異なります。リスナーは、すべてのボタンから個別に呼び出しを受け取ります。
また、リスナーは同じスレッド (UI スレッド) で実行されるため、一緒にトリガーされることはありません。ある時点で両方のコントロールのクリック イベントをキャッチすることは不可能です。1 つのリスナーがトリガーされ、次に別のリスナーがトリガーされます。ユーザーが完璧な世界で同じミリ秒程度でそれらを一緒にクリックしたと仮定したとしても. 同じミリ秒でクリックされたときに、クリックされて収集されたと見なされると誰が判断できますか! なぜ同じナノ秒ではないのですか。なぜ同じ時間ではないのですか:)
OK、クリック イベントの説明はこれで十分です。
必要なのはタッチ イベントで、次のように再生できます (コードはタッチ イベントのしくみも説明します)。
活動クラスのメンバー:
public boolean b1Down = false, b2Down = false;
onCreate メソッド コード:
Button b1 = (Button)findViewById(R.id.button1);
Button b2 = (Button)findViewById(R.id.button2);
b1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
boolean consume = false;
if (event.getAction() == MotionEvent.ACTION_UP)
{
b1Down = false;
}
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
b1Down = true;
if (b2Down)
{
// both are clicked now //
Toast.makeText(MainActivity.this, "Both are clicked now!", Toast.LENGTH_SHORT).show();
}
consume = true;
}
return consume;
}
});
b2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
boolean consume = false;
if (event.getAction() == MotionEvent.ACTION_UP)
{
b2Down = false;
}
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
b2Down = true;
if (b1Down)
{
// both are clicked now //
Toast.makeText(MainActivity.this, "Both are clicked now!", Toast.LENGTH_SHORT).show();
}
consume = true;
}
return consume;
}
});
于 2013-11-04T08:20:13.617 に答える