title: Model View Presenter with an EventBus, how to get Events back to Presenter?
body: <p>I am using the Model-View-Presenter design pattern coupled with an EventBus (Otto). The entire reason I implemented this pattern is to decouple events to the presenter only, and have the presenter update the views.</p>
  
  <p>This is an example of some of the code I have, I'll use getting <code>Events</code> as an example. (Please note that <code>Events</code> is different from the <code>EventBus</code> <code>Event</code>, meaning an <code>Event</code> in <code>Events</code> is an event like "Dad's Birthday", but an <code>Event</code> in the <code>EventBus</code> is a Bus-event).</p>
  
  <p><strong>Fragment</strong></p>
  
  <pre><code>public class EventFragment extends Fragment {
  
      private EventPresenter mEventPresenter;
  
      // Initialize boilerplate code...
  
      private void init() {
          mEventPresenter = new EventPresenter();
          mEventPresenter.loadEvents();
      }
  
      // I WANT TO MOVE THESE SUBSCRIPTION METHODS TO
      // MY PRESENTER OR SUBSCRIBER, BUT THEY ARE 
      // COUPLED TO THE ADAPTER OR A VIEW
  
      @Subscribe
      public void onEventsLoaded(EventsLoaded eventsLoaded) {
          List&lt;Event&gt; events = eventsLoaded.getEvents();
          mAdapter.setEvents(events);
      }
  
      @Subscribe
      public void onEventJoined(EventJoined eventJoined) {
          mItemView.doAnimation();
          mTextView.setText("Leave");
          mAdapter.joinEvent(eventJoined.getEvent());
      }
  
      @Subscribe
      public void onLeaveEvent(LeftEvent leftEvent) {
          mItemView.doAnimation();
          mTextView.setText("Join");
          mAdapter.leftEvent(leftEvent.getEvent());
      }
  
  }
  </code></pre>
  
  <p><strong>Presenter</strong></p>
  
  <pre><code>public class EventPresenter {
  
      // This is the only method I have right now kind of defeats the purpose of 
      // having a presenter
      public void loadEvents() {
          EventBus.getInstance().post(new LoadEvents());
      }
  
  }
  </code></pre>
  
  <p><strong>Subscriber</strong></p>
  
  <pre><code>public class EventSubscriber extends Subscriber {
  
      // This class is registered on the event bus
  
      @Subscribe
      public void onLoadEvents(LoadEvents loadEvents) {
          sClient.getEvents(new Callback&lt;List&lt;Event&gt;&gt;() {
                @Override
                public void onSuccess(List&lt;Event&gt; events, Response response) {
                     EventBus.post(new EventsLoaded(events));
                }
  
                @Override
                public void onFailure(.....) {
                      // Handle failure
                }
            };
      }
  }
  </code></pre>
  
  <p>How can I get the Presenters and the Subscribers to handle all the business logic, and have the Fragment only handle views?</p>