Пользовательский обработчик событий Android - PullRequest
43 голосов
/ 28 ноября 2011

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

Ответы [ 3 ]

109 голосов
/ 28 ноября 2011
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.
    }
 });   
13 голосов
/ 02 января 2017

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

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

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
      }
});
1 голос
/ 03 декабря 2018

Я нашел этот урок ОЧЕНЬ ПОЛЕЗНЫМ.В нем объясняются четыре шага использования настраиваемого прослушивателя для управления обратными вызовами в вашем коде:

1. Определите интерфейс как контракт событий с методами, которые определяют события и аргументы, которые относятся к соответствующим данным события.

2.Установите переменную-член слушателя и установщик в дочернем объекте, которому можно назначить реализацию интерфейса.

3.Owner передает слушателю, который реализует интерфейс, и обрабатывает события от дочернего объекта.

4. События триггера на определенном слушателе, когда объект хочет сообщить о событиях своему владельцу

Надеюсь, это поможет!

...