Sök…


Anmärkningar

Otto avskrivs till förmån för RxJava och RxAndroid . Dessa projekt tillåter samma händelsestyrda programmeringsmodell som Otto, men de är mer kapabla och erbjuder bättre kontroll över trådarna.

Passerar en händelse

Det här exemplet beskriver passering av en händelse med Otto Event Bus .

För att använda Otto Event Bus i Android Studio måste du infoga följande uttalande i din modulgradfil:

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

Händelsen som vi vill passera är ett enkelt Java-objekt:

public class DatabaseContentChangedEvent {
    public String message;

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

Vi behöver en buss för att skicka händelser. Detta är vanligtvis en 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() {
    }
}

Om du vill skicka en händelse som vi bara behöver vår BusProvider och det är post Här skickar vi en händelse om handlingen i en AsyncTask är klar:

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

    ...

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

Ta emot en händelse

För att ta emot en händelse är det nödvändigt att implementera en metod med händelsetypen som parameter och kommentera den med @Subscribe . Dessutom måste du registrera / avregistrera förekomsten av ditt objekt på BusProvider (se exempel Skicka en händelse ):

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);
    }
}

Viktigt: För att få den händelsen måste en instans av klassen existera. Detta är vanligtvis inte fallet när du vill skicka ett resultat från en aktivitet till en annan aktivitet. Så kolla ditt användningsfall för evenemangsbussen.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow