Android один метод OnClick для нескольких кнопок?

Я немного начал программировать в android, у меня есть 3 кнопки в одном действии.

Я видел несколько примеров кодов, которые назначают одно и то же событие OnClick всем кнопкам (даже если они выполняют совершенно разные действия), и в случае case case Switch(id) case method …

Какой лучший подход? Один метод onClick и переключение или множество методов, по одному для каждой кнопки?

Благодарю.

Solutions Collecting From Web of "Android один метод OnClick для нескольких кнопок?"

Если вы хотите уменьшить строки кодирования, используйте View's OnClick() with switch statement и если вы хотите обрабатывать отдельно все клики (для удобства понимания и поддержки кода), используйте отдельный button's onClick().

Обновить:

Если вы указали кнопки в вашем XML-файле макета Activity, то напишите атрибут android:onClick="" с тем же именем метода для всех кнопок и реализуйте этот метод в своей деятельности. Теперь у вас есть один метод для всех кнопок и в этом методе различают кнопки с идентификатором.

Пример:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:onClick="buttonOnClick" android:layout_height="wrap_content" android:text="Hello, I am a Button 1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:onClick="buttonOnClick" android:layout_height="wrap_content" android:text="Hello, I am a Button 2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:onClick="buttonOnClick" android:layout_height="wrap_content" android:text="Hello, I am a Button 3" /> </LinearLayout> 

Теперь в вашей деятельности реализуем buttonOnClick ,

 public void buttonOnClick(View view) { switch(view.getId()) { case R.id.button1: // Code for button 1 click break; case R.id.button2: // Code for button 2 click break; case R.id.button3: // Code for button 3 click break; } } 

Или вы можете применить один и тот же ключ для динамически добавленных кнопок в своей деятельности, например, вместо buttonOnClick вы должны использовать реализованный OnClickListerner's OnClick .

Используйте этот способ:

 @Override public void onCreate(Bundle savedInstanceState) { button1.setOnClickListener(onClickListener); button2.setOnClickListener(onClickListener); button3.setOnClickListener(onClickListener); } private OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1: //DO something break; case R.id.button2: //DO something break; case R.id.button3: //DO something break; } } }; 
 this.btnAddFriedtoFacebook = (Button) this.findViewById(R.id.btnAddFriedtoFacebook); this.btnAddFriedtoFacebook.setOnClickListener(this.backButtonClickListener); public OnClickListener backButtonClickListener = new OnClickListener() { public void onClick(final View view) { if (view == MatchInfoActivity.this.btnBack) { MatchInfoActivity.this.finish(); } if( view == MatchInfoActivity.this.btnAddFried){ Intent i = new Intent(Intent.ACTION_VIEW); MatchInfoActivity.this.startActivity(i); } if( view == MatchInfoActivity.this.btnAddBuddy){ Intent i = new Intent(Intent.ACTION_VIEW); MatchInfoActivity.this.startActivity(i); } } }; 

Вот хороший способ.

Я думаю, что регистрация onClick в xml (макет) лучше подходит.

РЕДАКТИРОВАТЬ:

Найдено связанных тем:

  1. Лучшая практика для определения событий кнопки в android
  2. Рекомендации по обработке событий пользовательского интерфейса

Зарегистрировано событие onClick в XML-макете, а затем обрабатывает его в коде. Вот как я это сделаю:

 <Button android:id="@+id/btplus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me" android:onClick="onBtnClicked"> 

Метод в .class

 public void onBtnClicked(View v) { switch (v.getId()) { case R.id.btplus: Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show(); break; case R.id.btminu: Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show(); break; default: break; } } 

Маленькое дополнение к ответу @Nguyen.

 findViewById(R.id.buttonOne).setOnClickListener(buttonClickListener); .... .... .... .... findViewById(R.id.buttonN).setOnClickListener(buttonClickListener); private View.OnClickListener buttonClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.buttonOne: // do something break; .... .... .... .... case R.id.buttonN: // do something break; } } }; 

Это может быть полезно, если вы не хотите инициализировать переменную кнопки, но хотите отслеживать событие нажатия кнопки. Благодаря!