2011-08-16 36 views
6

En Android parece haber 3 formas comunes de manejar los clics de botón, ¿cuánta diferencia hay entre los métodos? ¿Y alguno de ellos es "mejor" de alguna manera?¿Cómo se maneja un botón al hacer clic en Android?

Los tres métodos sigo viendo son: Clase

Anónimo

Encuentra el botón por su ID, a continuación, pasar a una nueva clase anónima para setOnClickListener, por ejemplo, en onCreate

findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // .. Whatever 
    } 
}); 

Implementar OnClickListener

Implementar OnClickListener y pasar this a setOnClickListener, a continuación, utilizar una DECLARACIÓN interruptor basado en el ID de botón, por ejemplo, en onCreate

findViewById(R.id.myButton).setOnClickListener(this); 

e implementar onClick como

public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.myButton: 
      // ... whatever ... 
      break; 
    } 
} 

Uso onClick XML atributo

En el diseño de XML para su actividad, en vez de dar su botón de un ID, utilice onClick como esto :

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:onClick="buttonClicked" 
    android:text="Button" /> 

Luego tienen un método buttonClicked en su Acitiviy así:

public void buttonClicked(View v) { 
    // ... whatever ... 
} 

En el momento en que tienden a utilizar el atributo XML, pero eso es sólo porque se trata de la menor cantidad de código. ¿Cuándo debería usar los otros métodos?

+0

+1 para describir el tercer método. Solo estoy aprendiendo Android y no tenía conocimiento del atributo 'onClick'. – Mike

Respuesta

4

Los dos primeros son los enfoques clásicos. Cuál prefieres es más una pregunta general de Java que una pregunta de Android. El tercero se agregó más tarde para facilitar las cosas.

Configurar un click listener en un botón es una tarea muy común, pero requiere bastante código repetitivo. Una forma de reducir la cantidad de la plantilla es compartir un solo oyente de clic entre varios botones . Si bien esta técnica reduce el número de clases, todavía requiere una buena cantidad de código y aún requiere que cada botón tenga una identificación en su archivo de diseño XML. Con Android 1.6, nada de esto es necesario. Todo lo que tiene que hacer es declarar un método público en su Actividad para manejar el clic (el método debe tener una vista argumento)

Source

1

realmente he visto siempre como preferencia. No estoy seguro de que haya alguna ventaja en el rendimiento de los dos métodos, ya que los últimos dos métodos pueden ser un poco más rápidos ya que no están creando objetos en tiempo de ejecución.

La primera opción aísla el código para el botón solo por lo que es muy fácil de depurar, ya sólo se sabe que el código se ejecutará cuando se hace clic en ese botón. Sin embargo, muchos botones pueden provocar que los métodos de inicialización se expandan a tamaños grandes.

Los dos últimos métodos colocan todos los controles de los botones en un lugar que puede ser conveniente y más limpio a veces, pero con muchos botones debe descifrar qué botón utilizó el usuario mediante el método v.getId().

La última opción le permite especificar fácilmente métodos específicos para los botones específicos para que pueda separarlos de esa manera, pero de nuevo que va a tener muchos métodos utilizados para fines individuales.

Siempre he usado el método en línea (clase anónima) para las ventanas de diálogo personalizados que tienen botones, ya que mantiene el código con el resto del diálogo en lugar de en una actividad o clase. Simplemente inicializo los botones del diálogo personalizado cuando anulo el onCreateDialog.

implemento el OnClickListener sobre la actividad si los botones están en la ventana principal.

Cuestiones relacionadas