Один OnClickHandler для нескольких кнопок

Я все время занимаюсь такими вещами:

Button button1 = (Button) findViewById(R.id.button1); Button button2 = (Button) findViewById(R.id.button2); Button button3 = (Button) findViewById(R.id.button3); button1.setOnClickListener(menuButtonListener); button2.setOnClickListener(menuButtonListener); button3.setOnClickListener(menuButtonListener); ... 

а также

  private OnClickListener myButtonListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1 : ... 

Есть ли лучший способ установить OnClickListener?

Solutions Collecting From Web of "Один OnClickHandler для нескольких кнопок"

Вы также можете установить его в свой макет xml, используя атрибут android: onclick.

 android:onClick="onClick" 

Затем в вашем классе активности добавьте метод onClick.

 public void onClick(View v) { ... 

Вот документация .

Попросите свой класс реализовать «View.OnClickListener», например

 public class MyActivity extends Activity implements View.OnClickListener { Button button1, button2, button3; @Override public void onCreate(Bundle bundle) { super.onCreate(); ... button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button3 = (Button) findViewById(R.id.button3); button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: // do stuff; break; case R.id.button2: // do stuff; break; ... } } 

Gettin @foenix ответ, вы можете просто сделать что-то вроде:

  int[] buttons = {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7 , R.id.button8, R.id.button9}; for (int i = 0; i < buttons.length; i++) { Button buttonNum = (Button) rootView.findViewById(buttons[i]); buttonNum.setOnClickListener(doSomething); } private OnClickListener doSomething= new OnClickListener() { @Override public void onClick(View v) { //doSomething } }; 

Необходимо отметить, что

 android:onclick="onClick" 

Требует, по крайней мере, Andoid SDK 1.6. Поэтому, если вы хотите, чтобы ваше приложение было доступно как можно большей аудитории, вы, вероятно, захотите написать свое приложение против Android 1.6. Если для вашего приложения не требуется функция, доступная только в версии 1.6+. Поэтому, хотя ваша первая попытка – это больше работать, она имеет большую обратную совместимость. Я обычно делаю это так, как вы, чтобы мои приложения 1.5 были совместимы.

Изменить: легко упустить это, если вы настроите Android 2.2 как SDK в своих настройках проектов, но установите версию minSDK на 3 (1.5), так как она не дает ошибок компилятора.

Я думаю, в случае, если ваши кнопки не находятся в Activity, а в FragmentDialog и т. Д., Это может помочь

 Context mContext = getActivity().getBaseContext(); mRes = mContext.getResources(); String[] idOfButtons = { "button1", "button2", "button3"}; for (int pos = 0; pos < idOfButtons.length; pos++) { Integer btnId = mRes.getIdentifier(idOfButtons[pos], "id",(getActivity()).getBaseContext().getPackageName()); ImageButton ib = (ImageButton) v.findViewById(btnId); ib.setOnClickListener(this.onClickNum); }