Как реализовать слушателя - PullRequest
17 голосов
/ 10 мая 2011

У меня проблема с дизайном. Мне нужно реализовать слушателя. Я видел следующий ТАК вопрос: Как создать собственный интерфейс Слушателя в Android?

Но в ссылке, указанной в ответе, автор создает прослушиватель, который просто расширяет определяемый системой прослушиватель. Например, onClick, вы должны выполнить некоторую проверку, а затем вызвать другой метод с именем "whenValidatedListener"

Мне нужно определить слушателей, которые не связаны с существующими слушателями событий. По сути, в нативном (C / C ++) коде происходит некоторая обработка, а в коде Android мне нужен слушатель, чтобы отвечать на определенные сообщения из него.

Я думаю, я мог бы сделать это с помощью обработчиков. Но AsyncTask - рекомендуемый подход для многопоточности.

Есть ли способ реализовать пользовательский слушатель, используя AsyncTask?

Ответы [ 2 ]

51 голосов
/ 10 мая 2011

AsyncTask не имеет ничего общего с реализацией слушателя.

Вот слушатель:

public interface TheListener {
    public void somethingHappened();
}

Называй как хочешь. Например, вот класс, который делает что-то вроде View:

public class Something {
    private TheListener mTheListener;

    public void setTheListener(TheListener listen) {
        mTheListener = listen;
    }

    private void reportSomethingChanged() {
        if (mTheListener != null) {
            mTheListener.somethingHappened();
        }
    }
}

Вы можете сделать это настолько сложным, насколько захотите. Например, вместо одного указателя прослушивателя вы можете использовать ArrayList, позволяющий зарегистрировать несколько прослушивателей.

Вызов этого из собственного кода также не имеет ничего общего с реализацией интерфейса слушателя. Вам просто нужно узнать о JNI, чтобы узнать, как нативный код может взаимодействовать с кодом языка Java.

5 голосов
/ 22 февраля 2014

Просто чтобы прояснить ситуацию;

вы делаете именно то, что сказал @hackbod, и добавляете это:

activity, который включает в себя класс (с помощью метода setListener(Listener listen)), реализует Listener и в его oncreate или onResume или где бы вы ни вызывали yourClass.setListener(this).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...