One OnClickHandler para múltiples botones

Me encuentro haciendo cosas como esta todo el tiempo:

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); ... 

y

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

¿Hay una mejor manera de configurar OnClickListener?

    También puede configurarlo en su diseño xml usando el atributo android: onclick.

     android:onClick="onClick" 

    Luego, en su clase de actividad, agregue el método onClick.

     public void onClick(View v) { ... 

    Aquí está la documentación .

    Haga que su clase implemente `View.OnClickListener ‘, como

     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; ... } } 

    Al obtener la respuesta de @finix, simplemente puede hacer algo como:

      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 } }; 

    Se debe notar que

     android:onclick="onClick" 

    requiere al menos Andoid SDK 1.6. Por lo tanto, si desea que su aplicación sea accesible para la mayor audiencia posible, es probable que desee escribir su aplicación en Android 1.6. A menos que su aplicación requiera una función que solo está disponible en 1.6+. Entonces, aunque su primer bash es un poco más laborioso, tiene una mayor compatibilidad con versiones anteriores. Normalmente lo hago de la manera en que lo haces, para mantener mi Apps 1.5 comptaible.

    Editar: Es fácil pasar esto por alto si configura Android 2.2 como SDK en la configuración de sus proyectos, pero configure la versión de minSDK en 3 (1.5), ya que no da errores de comstackción.

    Creo que en caso de que sus botones no estén en Activity, sino en FragmentDialog, etc., esto puede ayudar

     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); } 

    Si desea hacer menos código para oyentes de clic, tiene esta lib [ http://jakewharton.github.io/butterknife/%5D

    solo tienes que hacer esto

      @OnClick({ R.id.button1, R.id.button2, R.id.button3 }) public void doSomething(View button) { //do whatever you want button.changeWhateverInTheView(); }