usar studio metodo eventos event como atributo agregar java android event-handling

java - studio - metodo on click android



Las mejores prácticas de implementación de onClickListener en Android (2)

Nunca utilizo el atributo onClick ya que vincula el diseño a una Actividad específica (debe encontrar el método a través de la reflexión). No funciona en Fragmentos.

Las opciones 2 y 3 son virtualmente idénticas. La opción 3 podría ser más ventajosa si desea usar el miembro privado como OnClickListener de múltiples vistas.

La opción 4 está cerca de la opción 3. Una diferencia clave es que cambia la declaración de clase, por lo que si es importante mantener la declaración de clase libre de implementaciones de interfaz (o tal vez necesites mantener la compatibilidad binaria de algún tipo), puedes no quiero usar esta opción

Mi consejo es evitar la opción 1 y elegir la que mejor se adapte a tu estilo de código. Tampoco está obligado a utilizar el mismo enfoque en cada lugar de su código.

Hay cuatro formas de agregar un onClickListener a una vista clicable (botón, por ejemplo):

  1. establece el atributo onClick en el archivo de diseño que apunta a un método en la actividad,
  2. crear una clase interna anónima,
  3. asigna el onClickListener a una variable miembro privada.
  4. hacer que el contexto de la actividad implemente la interfaz onClickListener.

Entonces mi pregunta es, ¿cómo eliges una de estas técnicas de implementación sobre otra? ¿Existen mejores prácticas de acuerdo con ciertas condiciones o solo es una cuestión de preferencia del programador?


Aquí usamos el llamado patrón de devolución de llamada.

public class Button { private Callback callback; public Button(Callback callback) { this.callback = callback; } public void update() { // Check if clicked.. callback.onClick(this); } public interface Callback { public void onClick(Button Button); } } Button b = new Button(new Callback() { @Override public void onClick(Button b) { System.out.println("Clicked"); } });

En nuestro caso, el controlador onClick implementa la interfaz View.OnClickListener.

Puntos clave:

  • consistencia con actividad / fragmento;
  • acceso a los miembros de la actividad / fragmento;
  • legibilidad;
  • @Michael Krause mostró un punto más sobre las fugas de memoria ;

1) El atributo en el archivo XML se puede usar solo para la actividad, ya que @Karakuri mencionó que usa la reflexión que es lenta.

2) La clase interna anónima tiene reglas especiales para el acceso a los miembros de la clase adjunta (ver [1] , [2] ). Hay algunas situaciones en las que puede haber pérdidas de memoria (por ejemplo, enhebrado con AsyncTask, Handlers).

3) Aquí tienes acceso completo a los miembros de la clase adjunta.

4) Es una variación de 3d.

La legibilidad depende del tamaño de su controlador, la lógica pequeña puede estar bien para alinearse, pero para bloques más grandes de código, considere 3d y 4th.