У меня есть деятельность:
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!!!
}
}
}
Как проверить, какая кнопка была нажата?
Ответы:
Вы узнаете, как это легко сделать:
Или, если вы работаете только с одним clicklistener, вы можете сделать:
Тем не менее, я не рекомендую делать это таким образом, так как вам придется добавлять
if
для каждой кнопки, которую вы используете. Это трудно поддерживать.источник
View
это неButton
, ноButton
этоView
. Тем не менее, вы можете броситьView
кButton
. Имейте в виду, что второй способ сделать это не рекомендуется ... возможно, что v не может быть кнопкой, которая сгенерирует исключение приведения.Или вы можете попробовать то же самое, но без слушателей. На вашей кнопке определение XML:
И в вашем коде определите метод
ButtonOnClick
:источник
if
операторов и слушателей. Слушатели хороши, если кнопки создаются во время выполнения, но часто это не так.Fragment
s, так как обратный вызов должен находиться в действии (а не во фрагменте).Я предпочитаю:
А потом:
Switch
-case
легче поддерживать, чемif
-else
, и эта реализация не требует создания множества переменных класса.источник
Пять способов подключения прослушивателя событий - отличная статья, в которой рассматриваются различные способы настройки прослушивателя событий. Позвольте мне расширить это здесь для нескольких слушателей.
1. Класс участника
2. Тип интерфейса
3. Анонимный внутренний класс
4. Реализация в деятельности
5. Атрибут в макете просмотра для событий OnClick
И в XML:
источник
Если вы не хотите сохранять экземпляры кнопки 2 в коде класса, следуйте этому ЛУЧШЕМУ способу (это более понятно и быстро !!):
источник
Другой способ сделать это - один слушатель от активности, такой как это:
Мне нравится делать это с одним IF вместо switch-else, но если вы предпочитаете это, то вам следует сделать:
источник
Наилучшим способом является
switch
-ing между v.getId (). Наличие отдельного анонимного OnClickListener для каждой кнопки занимает больше памяти. Приведение вида к кнопке не нужно. Использование if-else, когда возможно переключение, медленнее и сложнее для чтения. В источнике Android вы часто можете заметить сравнение ссылок по if-else:Я не знаю точно, почему они выбрали этот путь, но он тоже работает.
источник
использовать setTag ();
как это:
источник
В дополнение к ответу Кристиана С. (извините, у меня нет возможности комментировать), если вы сделаете один обработчик для обеих кнопок, вы можете напрямую сравнить v с b1 и b2, или если вы хотите сравнить по идентификатору, вы не нужно приводить v к кнопке (View также имеет метод getId ()), и в этом случае не нужно беспокоиться об исключении приведения.
источник
источник
Проверьте эту статью для более подробной информации
источник