Pregunta

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 establecer el OnClickListener?

¿Fue útil?

Solución

También puede configurarlo en su xml diseño utilizando el androide:. Onclick atributo

android:onClick="onClick"

A continuación, en la clase de actividad añadir el método onClick.

public void onClick(View v) {
...

Aquí está la documentación .

Otros consejos

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

Getting @foenix respuesta, sólo tiene que 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
   }
};

Debe tenerse en cuenta, que

android:onclick="onClick"

requiere al menos Andoid SDK 1.6. Así que si usted quiere que su aplicación sea accesible a la mayor audiencia grande como sea posible, es probable que desea escribir su aplicación contra Android 1.6. A menos que su aplicación requiere una característica que sólo está disponible en 1.6+. Así, mientras que su primer intento es poco más de trabajo, que tiene mayor compatibilidad hacia atrás. Yo suelo hacer de la manera que lo hace, para mantener mi Aplicaciones 1.5 comptaible.

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

creo que en el caso, cuando los botones no están en 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);
}

Si usted quiere hacer menos código de clic oyentes que tiene este lib [ http: // jakewharton. github.io/butterknife/]

sólo 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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top