Pytanie w sprawie class, listener, android, android-activity, events – Android - słuchacz zdarzeń

9

Mam nadzieję, że to będzie proste pytanie. Mam główne działanie, w tym działaniu tworzę instancję jakiejś klasy. Jak wysłać jakieś wydarzenie z jednej klasy do głównej? Jak skonfigurować pewnego rodzaju słuchacza, aby wysyłać powiadomienia między klasami. Jedyną opcją, którą teraz znam / używam, jest zachowanie odniesienia do klasy nadrzędnej i wywołanie bezpośrednio pewnej funkcji z klasy potomnej.

Zastanawiam się, czy możliwe jest utworzenie czegoś takiego w ActionScript, gdzie mogę wywołać dispatchEvent (nowe zdarzenie („nazwa”)), a później setup addEventlistener (funkcja „nazwa”)?

„Implementuję jakąś klasę” oznacza, że ​​zadeklarowałeś zagnieżdżoną klasę w swojej klasie aktywności? Chopin

Twoja odpowiedź

2   odpowiedź
1

która generuje zdarzenia.

Kiedy generowane jest zdarzenie, iteruj po tej liście i wywołaj metodę, którą muszą implementować wszyscy odbiorcy (może za pośrednictwem interfejsu?)

Mam nadzieję, że to pomogło, JQCorreia

18

że ​​zadeklarowałeś zagnieżdżoną klasę w swojej klasie Activity, to zagnieżdżona klasa niestatyczna będzie miała odniesienie do obiektu klasy nadrzędnej.

Ogólnie rzecz biorąc, zawsze możesz utworzyć wzorzec dispatcher / listener. Utwórz interfejs nasłuchiwania i dodaj metodę addListener lub setListener do klasy, która wywoła zdarzenie.

Przykład słuchacza:

<code>public interface IAsyncFetchListener extends EventListener {
    void onComplete(String item);
    void onError(Throwable error);
}
</code>

Przykład dyspozytora zdarzeń:

<code>public class FileDownloader {
    IAsyncFetchListener fetchListener = null;
    ...
    private void doInBackground(URL url) {
        ...
        if (this.fetchListener != null)
            this.fetchListener.onComplete(result);
    }

    public void setListener(IAsyncFetchListener listener) {
        this.fetchListener = listener
    }
}
</code>

Przykład klasy z detektorem zdarzeń:

<code>public class MyClass {

    public void doSomething() {
        FileDownloader downloader = new FileDownloader();

        downloader.setListener(new IAsyncFetchListener() {

            public void onComplete(String item) {
                // do something with item
            }

            public void onError(Throwable error) {
                // report error
            }
        });

        downloader.start();
    }
}
</code>

Powiązane pytania