Un OnClickHandler para varios 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 : ... 

¿Existe una mejor manera de configurar OnClickListener?

    5 Solutions collect form web for “Un OnClickHandler para varios botones”

    También puede configurarlo en su layout xml usando el atributo android: onclick.

     android:onClick="onClick" 

    A continuación, en su clase de actividad, añada 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; ... } } 

    Gettin @foenix respuesta, 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 a la mayor audiencia posible, probablemente desee escribir su aplicación en Android 1.6. A menos que su aplicación requiera una función que sólo está disponible en 1.6+. Así, mientras que su primer intento es un poco más de trabajo, tiene una mayor compatibilidad hacia atrás. Normalmente lo hago de la manera en que lo haces, para mantener mi Apps 1.5.

    Editar: Es fácil pasar por alto esto, si se configura Android 2.2 como SDK en la configuración de proyectos, pero establecer la versión de minSDK a 3 (1,5), ya que no da errores de compilador.

    Creo que en el caso, cuando los botones no están en la actividad, pero 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); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.