Suche…


Bemerkungen

Otto ist veraltet zugunsten von RxJava und RxAndroid . Diese Projekte erlauben dasselbe ereignisgesteuerte Programmiermodell wie Otto, sind jedoch leistungsfähiger und bieten eine bessere Steuerung des Threadings.

Eine Veranstaltung übergeben

Dieses Beispiel beschreibt das Übergeben eines Ereignisses mit dem Otto Event Bus .

Um den Otto Event Bus in Android Studio verwenden zu können , müssen Sie die folgende Anweisung in die Modul-Datei einfügen:

dependencies {
    compile 'com.squareup:otto:1.3.8'
}

Das Ereignis, das wir übergeben möchten, ist ein einfaches Java-Objekt:

public class DatabaseContentChangedEvent {
    public String message;

    public DatabaseContentChangedEvent(String message) {
        this.message = message;
    }
}

Wir brauchen einen Bus, um Ereignisse zu senden. Dies ist normalerweise ein Singleton:

import com.squareup.otto.Bus;

public final class BusProvider {
    private static final Bus mBus = new Bus();

    public static Bus getInstance() {
        return mBus;
    }

    private BusProvider() {
    }
}

Um eine Veranstaltung zu versenden, benötigen wir nur unseren BusProvider und dessen post Methode. Hier senden wir ein Ereignis, wenn die Aktion einer AsyncTask abgeschlossen ist:

public abstract class ContentChangingTask extends AsyncTask<Object, Void, Void> {

    ...

    @Override
    protected void onPostExecute(Void param) {
        BusProvider.getInstance().post(
            new DatabaseContentChangedEvent("Content changed")
        );
    }
}

Ereignis empfangen

Um ein Ereignis zu erhalten, muss eine Methode mit dem Ereignistyp als Parameter implementiert und mit @Subscribe kommentiert werden. Außerdem müssen Sie die Instanz Ihres Objekts beim BusProvider registrieren / die BusProvider (siehe Beispiel Ereignis senden ):

public class MyFragment extends Fragment {
    private final static String TAG = "MyFragment";

    ...

    @Override
    public void onResume() {
        super.onResume();
        BusProvider.getInstance().register(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        BusProvider.getInstance().unregister(this);
    }

    @Subscribe
    public void onDatabaseContentChanged(DatabaseContentChangedEvent event) {
        Log.i(TAG, "onDatabaseContentChanged: "+event.message);
    }
}

Wichtig: Um dieses Ereignis zu erhalten, muss eine Instanz der Klasse vorhanden sein. Dies ist normalerweise nicht der Fall, wenn Sie ein Ergebnis von einer Aktivität an eine andere Aktivität senden möchten. Überprüfen Sie also Ihren Use Case für den Event-Bus.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow