2011-11-28 2 views
35

Скажите, что я хочу сделать свой собственный прослушиватель событий для своего класса, как это сделать? Нужно ли поддерживать поток вручную?Пользовательский прослушиватель событий для Android

+1

Смотрите тему CodePath [Создание пользовательских Слушателей] (https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

ответ

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

Создать интерфейс, который будет реализован с помощью вашей деятельности:

public interface OnCustomEventListener { 
    void onEvent(); 
} 

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

Теперь вы должны знать, когда событие на самом деле происходит. Например, когда пользователь прикасается точку на экране, переопределить метод onTouchEvent:

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

Кроме того, вы можете создать отдельное событие, которое вы хотите. (примеры могут касаться, ждать ровно 2 секунды и отпускать - вам нужно будет сделать некоторую логику внутри события касания).

В вашей деятельности, вы можете использовать объект customView установить EventListener как таковой:

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

ли скобки на определении интерфейса OnCustomEventListener опечатка? –

+1

Упс! да, это опечатка, исправила ее. спасибо – rDroid

+0

rDroid, спасибо за пример! Должен ли интерфейс OnCustomEventListener быть объявлен внутри или вне класса CustomView? – Brabbeldas

5

Это может быть сделано следующим образом

Сначала создать класс интерфейса:

public interface OnStopTrackEventListener { 
    public void onStopTrack(); 
} 

Затем создайте класс, который управляет интерфейсом:

public class Player { 

    private OnStopTrackEventListener mOnStopTrackEventListener; 

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

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

    } 
} 

Это все. Давайте использовать его сейчас

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

Красивый код. – Dskato

Смежные вопросы