¿Cuál es la diferencia entre Android onClick en XML y onClickListener?

Diferencia entre OnClickListener y OnClick:

  • OnClickListener es la interfaz que necesita implementar y se puede configurar en una vista en código java.
  • OnClickListener es lo que espera a que alguien haga clic, onclick determina qué sucede cuando alguien hace clic.
  • Últimamente, Android agregó un atributo xml a las vistas llamado android: onclick, que se puede usar para manejar los clics directamente en la actividad de la vista sin necesidad de implementar ninguna interfaz.
  • Puede intercambiar fácilmente una implementación de escucha con otra si es necesario.
  • Un OnClickListener le permite separar la acción / comportamiento del evento de clic de la Vista que desencadena el evento. Si bien para casos simples esto no es un gran problema, para el manejo de eventos complejos, esto podría significar una mejor legibilidad y facilidad de mantenimiento del código
  • Como OnClickListener es una interfaz, la clase que la implementa tiene flexibilidad para determinar las variables de instancia y los métodos que necesita para manejar el evento. Nuevamente, esto no es un gran problema en casos simples, pero para casos complejos, no queremos mezclar necesariamente las variables / métodos relacionados con el manejo de eventos con el código de la Vista que desencadena el evento.
  • El enlace onClick con función en XML Layout es un enlace entre onClick y la función que llamará. La función debe tener un argumento (la Vista) para que funcione onClick.

Ambos funcionan de la misma manera, solo que uno se configura a través del código java y el otro a través del código xml.

Implementación del código setOnClickListener:

Botón btn = (Botón) findViewById (R.id.mybutton);

btn.setOnClickListener (nueva View.OnClickListener () {
@Anular
public void onClick (Ver v) {
myFancyMethod (v);
}
});

// algo más de código

public void myFancyMethod (Ver v) {
// hace algo muy interesante
}

Implementación XML:

<Botón android: id = "@ + id / mybutton"
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: text = “¡Haz clic en mí!”
android: onClick = “myFancyMethod” />

Actuación:

Ambos son iguales en rendimiento. Xml se analiza previamente en código binario durante la compilación. así que no hay gastos generales en Xml.

Limitación:

android: onClick es para API nivel 4 en adelante, por lo que si está apuntando a <1.6, entonces no puede usarlo.

Fuente: Android onClick en XML vs. OnClickListener