2011-11-28 24 views
35

Digamos que quiero hacer mi propio oyente de eventos para mi clase, ¿cómo puedo hacer eso? ¿Debo mantener un hilo manualmente?Oyente de eventos personalizados de Android

+1

vea el tema codepath [Creación de oyentes personalizados] (https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

Respuesta

92
public class CustomView extends View(){ 
OnCustomEventListener mListener; 
: 
://some code 
: 
: 

crear una interfaz que será ejecutado por su actividad:

public interface OnCustomEventListener { 
    void onEvent(); 
} 

public void setCustomEventListener(OnCustomEventListener eventListener) { 
    mListener = eventListener; 
} 

Ahora lo que necesita saber cuando el evento está ocurriendo en realidad. Por ejemplo, cuando el usuario toca un punto en la pantalla, reemplazar el método onTouchEvent:

onTouchEvent(MotionEvent ev) { 
    if (ev.getAction==MotionEvent.ACTION_DOWN) { 
     if(mListener!=null) 
      mListener.onEvent(); 
    } 
} 

Del mismo modo, se puede crear un evento específico que desea. (Los ejemplos podrían tocarse hacia abajo, esperar exactamente 2 segundos y soltar, necesitaría hacer algo de lógica dentro del evento táctil).

En su actividad, puede utilizar el objeto CustomView para establecer un eventListener como tal:

customView.setCustomEventListener(new OnCustomEventListener() { 
    public void onEvent() { 
     //do whatever you want to do when the event is performed. 
    } 
}); 
+0

son los paréntesis en la definición de la interfaz OnCustomEventListener un error tipográfico? –

+1

¡Uy! sí, es un error tipográfico, lo corrigió. gracias – rDroid

+0

rDroid, gracias por el ejemplo! ¿Debería declararse la interfaz OnCustomEventListener dentro o fuera de la clase CustomView? – Brabbeldas

5

Se puede hacer de la siguiente manera

En primer lugar crear una clase de interfaz:

public interface OnStopTrackEventListener { 
    public void onStopTrack(); 
} 

A continuación, cree la clase que controla la interfaz:

public class Player { 

    private OnStopTrackEventListener mOnStopTrackEventListener; 

    public void setOnStopTrackEventListener(OnStopTrackEventListener eventListener) 
    { 
     mOnStopTrackEventListener = eventListener; 
    } 

    public void stop() 
    { 
     if(mOnStopTrackEventListener != null) 
     { 
      mOnStopTrackEventListener.onStopTrack(); 
     } 

    } 
} 

Eso es todo. Vamos a usar ahora

Player player = new Player(); 
player.stop(); //We are stopping music 
player.setOnStopTrackEventListener(new OnStopTrackEventListener() { 
     @Override 
     public void onStopTrack() { 
      //Code to work when music stops 
     } 
}); 
+0

Hermoso código. – Dskato

Cuestiones relacionadas