Prácticas recomendadas para la implementación de Android onClickListener
Existen cuatro maneras de agregar un onClickListener a una Vista que se puede hacer clic (botón, por ejemplo):
- Establezca el atributo onClick en el archivo de diseño que señala un método en la actividad,
- Crear una clase interna anónima,
- Asigne el onClickListener a una variable de miembro privado.
- Haga que el contexto Activity implemente la interfaz onClickListener.
Así que mi pregunta es, ¿cómo elegir una de estas técnicas de implementación sobre otra? ¿Existen mejores prácticas de acuerdo con ciertas condiciones, o es sólo una cuestión de preferencia del programador?
- Android - Cómo configurar un método con nombre en button.setOnClickListener ()
- Crear un controlador personalizado de finalización / devolución de llamada para devolver objetos después de que se completa una solicitud HTTP
- Android: ¿cómo obtener algún evento de KeyPress con ejemplo?
- Manejo de un elemento de menú Haga clic en Evento - Android
- OnTouch en MapView sólo se dispara la primera vez
- ¿Cómo puedo cambiar el texto de EditText sin activar el Text Watcher?
- Mejor manera de manejar eventos en Android
- Escucha los cambios de volumen en Android
- Android: no puede ver ACTION_MOVE / UP en onTouchEvent de un RelativeLayout
- Android: maneja eventos de teclado virtual y físico
- Implementar múltiples oyentes de eventos en el mismo fragmento - Android
- ¿Cómo es posible contar el número de mensajes en cola en un Handler?
- Interacción de ExpandableListAdapter.getChildView () con AbsListView.LayoutParams
Aquí usamos el patrón de llamada 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 onClick handler 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 bueno acerca de fugas de memoria ;
1) Atributo en el archivo XML se puede utilizar sólo para la actividad, como @ Karakuri mencionó que utiliza la reflexión que es lento.
2) La clase interna anónima tiene reglas especiales para el acceso a los miembros de la clase inclusiva (ver [1] , [2] ). Hay algunas situaciones en las que pueden ocurrir fugas de memoria (por ejemplo, enhebrado con AsyncTask, Handlers).
3) Aquí usted tiene un acceso completo a los miembros de la clase de inclusión.
4) Es una variación de 3d.
La legibilidad depende del tamaño de su controlador, la lógica pequeña puede estar bien en línea, pero para bloques más grandes de código, considere 3d y 4th.
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. Opción 3 podría ser más ventajoso si desea utilizar el miembro privado como OnClickListener
de varias vistas.
La opción 4 está cerca de la opción 3. Una diferencia clave es que cambia la declaración de clase, así que si es importante que mantenga la declaración de clase libre de implementaciones de interfaz (o tal vez necesite mantener algún tipo de compatibilidad binaria), puede No quiero usar esta opción.
Mi consejo es evitar la opción 1 y elegir lo que mejor se adapte a su estilo de código. Tampoco está obligado a utilizar el mismo enfoque en cada lugar del código.
- ¿Cómo cambio entre el GPS y el proveedor de la red?
- NetworkSecurityConfig: No hay configuración de seguridad de red especificada – Android 7.0 error?