У меня есть действие:
public class Mtest extends Activity {
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState) {
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler);
b2.setOnClickListener(myhandler);
...
}
View.OnClickListener myhandler = new View.OnClickListener() {
public void onClick(View v) {
// MY QUESTION STARTS HERE!!!
// IF b1 do this
// IF b2 do this
// MY QUESTION ENDS HERE!!!
}
}
}
Как я проверяю, какая кнопка была нажата?
Вы узнаете, как это легко сделать:
public class Mtest extends Activity {
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState) {
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler1);
b2.setOnClickListener(myhandler2);
...
}
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
// it was the 1st button
}
};
View.OnClickListener myhandler2 = new View.OnClickListener() {
public void onClick(View v) {
// it was the 2nd button
}
};
}
Или, если вы работаете только с одним прослушивателем кликов, вы можете сделать:
View.OnClickListener myOnlyhandler = new View.OnClickListener() {
public void onClick(View v) {
switch(v.getId()) {
case R.id.b1:
// it was the first button
break;
case R.id.b2:
// it was the second button
break;
}
}
}
Хотя я не рекомендую делать это так так как вам нужно будет добавить if
для каждой используемой кнопки. Это сложно поддерживать.
В дополнение к ответу Кристиана С (извините, у меня нет возможности комментировать), если вы сделаете один обработчик для обеих кнопок, вы можете напрямую сравнить v с b1 и b2, или если вы хотите сравнить по идентификатору, вам не нужно приводить v к кнопке (View также имеет метод getId ()), и таким образом не нужно беспокоиться об исключении приведения.
Лучше всего переключить
-ing между v.getId (). Наличие отдельного анонимного OnClickListener для каждой кнопки занимает больше памяти. Преобразование просмотра в кнопку не требуется. Использование if-else при возможности переключения медленнее и труднее для чтения. В исходниках Android вы часто можете заметить сравнение ссылок с помощью if-else:
if (b1 == v) {
// ...
} else if (b2 == v) {
Я не знаю точно, почему они выбрали этот путь, но он тоже работает.