I used EventBus for communication between Activity and Fragment without problems, however when I tired to do the same with two Fragments, EventBus notifies me that there has been no subscriber for given event. Here is a sample example of sending event from FragmentB to subscribed FragmentA:
Sample FragmentA(Receiver, which doesn't receive a message):
public class FragmentA extends Fragment {
private View mView;
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(int msg) {/* Do something */};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.a_fragment_layout, container, false);
EventBus.getDefault().register(this);
return mView;
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
}
Sample FragmentB(Sender):
public class FragmentB extends Fragment {
private View mView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.b_fragment_layout, container, false);
sendMessage(1);
return mView;
}
private void sendMessage(int msg){
EventBus.getDefault().post(msg);
}
}
Error which I get:
No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent
The problem seems to be quite simple, however I can't figure it out.
Well, create a simple model class, let's call it NotifyEvent
public class NotifyEvent {
public int mValue;
public NotifyEvent(int value){
this.mValue = value;
}
}
and now sending and receiving should be like
in FragmentB:
private void sendMessage(int msg){
EventBus.getDefault().post(new NotifyEvent(msg));
}
in FragmentA:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(NotifyEvent event){
int msg = event.mValue;
// do something with msg.
}
for details please go here