Buscar..


Observaciones

Otto está en desuso a favor de RxJava y RxAndroid . Estos proyectos permiten el mismo modelo de programación controlado por eventos que Otto, pero son más capaces y ofrecen un mejor control de los hilos.

Pasando un evento

Este ejemplo describe cómo pasar un evento usando el Otto Event Bus .

Para usar Otto Event Bus en Android Studio , debe insertar la siguiente declaración en su módulo de archivos de gradle:

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

El evento que nos gustaría pasar es un simple objeto Java:

public class DatabaseContentChangedEvent {
    public String message;

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

Necesitamos un autobús para enviar eventos. Esto es típicamente un 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() {
    }
}

Para enviar un evento solo necesitamos nuestro BusProvider y su método de post . Aquí enviamos un evento si se completa la acción de una AsyncTask:

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

    ...

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

Recibiendo un evento

Para recibir un evento es necesario implementar un método con el tipo de evento como parámetro y anotarlo con @Subscribe . Además, debe registrar / anular el registro de la instancia de su objeto en el BusProvider (ver ejemplo Enviando un evento ):

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

Importante: para recibir ese evento debe existir una instancia de la clase. Este no suele ser el caso cuando desea enviar un resultado de una actividad a otra actividad. Así que revisa tu caso de uso para el autobús del evento.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow