Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: with Greenrobot EventBus how to communicate between 2 Activity?

I would like to communicate between 2 Activity. Both are the register() and the unregister() methods:

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

The ActivityB is started when I click in my list (item selection). The aim of ActivityB is to update some informations, and to send these new informations to ActivityA; so in ActivityB I call:

EventBus.getDefault().post(new MyNewEvent(bla bla bla));

In my ActivityA I have this method:

public void onEvent(MyNewEvent event) {
    ...
}

Unfortunately this method onEvent is never called. Why ? Because when ActivityB starts the method onStop() in ActivityA is called, so the unregister with the bus is done...

So how to communicate in this case between these 2 Activity by using EventBus ?

Thank you guys!

like image 540
anthony Avatar asked Sep 04 '15 16:09

anthony


2 Answers

You can actually do that by using Sticky Events.

http://greenrobot.org/eventbus/documentation/configuration/sticky-events/

Basically, you post an event as sticky with .postSticky() on your Activity B and when Activity A is registered again, it will automatically receive that sticky event.

But as stated in @jlhonora's answer, startActivityForResult might be better suited for your need.

like image 175
Doom5 Avatar answered Oct 17 '22 06:10

Doom5


As you already figured out, you won't be able to use EventBus to communicate between two activities, since you can't have both registered for events at the same time.

The startActivityForResult pattern is much better suited for what you're trying to achieve : http://developer.android.com/reference/android/app/Activity.html#StartingActivities

like image 3
jlhonora Avatar answered Oct 17 '22 07:10

jlhonora