Intereting Posts
Уведомления в определенное время каждый день Ошибка при записи файлов с Android Storage Access на Lollipop Не удается запустить Eclipse – Java был запущен, но вернулся код выхода = 13 Изменение стиля шрифта в закладках панели действий с помощью Шерлока Как использовать layout_width с помощью файла ресурсов? Переход от бесплатного приложения к платному приложению в Google Play Как заставить ConstraintLayout работать с процентными значениями? Как получить нажатую строку из списка с помощью OnItemClick? Maven говорит, что нет плагинов: как их установить? Take Picture без предварительного просмотра Android Как получить кнопку «Далее» на экранной клавиатуре Android вместо кнопки «Go» в телефонной запинке Почему в пользовательской учетной записи Android не отображается «Учетные записи и настройки»? Android – значок уведомления о появлении строки состояния Использовать одиночный макет xml для нескольких действий с разными данными Ответ JSONArray с Volley для Android

Один 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); }