RxBus

RxBus is an Android reactive event bus that simplifies communication between Presenters, Activities, Fragments, Threads, Services, etc.

Download

dependencies {
    compile 'com.github.florent37:rxbus:1.0.0'
}

RxBus in 2 steps

1. Prepare subscribers

RxBus.getDefault()
                .onEvent("eventName")
                .doOnSubscribe(disposables::add)
                .subscribe(s -> {
                     //called when an event "eventName" is posted      
                });

2. Post event

RxBus.getDefault().post("eventName");

Messages types

rxbus.post(String) <-> rxbus.onEvent(String)

rxbus.post(userInstance) <-> rxbus.onEvent(User.class)

Extended Bus

1. Extend RxBus for a specific usage

public class RxBusUser extends RxBus {

    private static RxBusUser instance = new RxBusUser();

    public static RxBusUser getInstance() {
        return instance;
    }

    public Observable<User> onUserChanged(){
        return super.onEvent(User.class);
    }

    public void userChanged(User user){
        super.post(user);
    }

    public void displayUser(boolean display){
        super.post(new DisplayUserCustomEvent(display));
    }

    public Observable<Boolean> onDisplayUser(){
        return super.onEvent(DisplayUserCustomEvent.class)
                .map(DisplayUserCustomEvent::displayUser);
    }

    protected class DisplayUserCustomEvent {

        public boolean displayUser;

        public DisplayUserCustomEvent(boolean displayUser) {
            this.displayUser = displayUser;
        }

        public boolean displayUser() {
            return displayUser;
        }
    }

}

2. Register to user change

final RxBusUser rxBusUser = RxBusUser.getInstance();

rxBusUser.onUserChanged()
        .doOnSubscribe(disposables::add)
        .subscribe(user -> display(user));

3. Post the user

RxBusUser.getInstance().userChanged(user);

Unsubscribe

1. don’t forget to add the disposable to a CompositeDisposable `.doOnSubscribe(compositeDisposable::add)`

2. OnDestroy should call `compositeDisposable.clear()`

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *