2011-11-28 33 views
35

Dire che voglio diventare il mio ascoltatore di eventi per la mia classe, come faccio? Devo mantenere un thread manualmente?Listener di eventi personalizzati Android

+1

vedere l'argomento percorsi di codice [Creazione di listener personalizzati] (https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

risposta

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

Creare un'interfaccia che sarà attuato con la vostra attività:

public interface OnCustomEventListener { 
    void onEvent(); 
} 

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

Ora è necessario sapere quando l'evento è in realtà avvenendo. Per esempio, quando l'utente tocca un punto sullo schermo, l'override metodo onTouchEvent:

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

Allo stesso modo, è possibile creare un evento specifico che si desidera. (gli esempi potrebbero essere sfiorati, attendere esattamente 2 secondi e rilasciare- dovresti fare un po 'di logica nell'evento touch).

Nella vostra attività, è possibile utilizzare l'oggetto CustomView per impostare un EventListener in quanto tale:

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

Sono le parentesi per la definizione dell'interfaccia OnCustomEventListener un errore di battitura? –

+1

Oops! sì è un errore di battitura, corretto. grazie – rDroid

+0

rDroid, grazie per l'esempio! L'interfaccia OnCustomEventListener deve essere dichiarata all'interno o all'esterno della classe CustomView? L'interfaccia – Brabbeldas

5

Può essere fatto nel modo seguente

Innanzitutto creare una classe di interfaccia:

public interface OnStopTrackEventListener { 
    public void onStopTrack(); 
} 

Quindi creare la classe che controlla l'interfaccia:

public class Player { 

    private OnStopTrackEventListener mOnStopTrackEventListener; 

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

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

    } 
} 

Questo è tutto. Usiamo ora

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

Bellissimo codice. – Dskato

Problemi correlati