
我正在使用Model-VIEw-Presenter设计模式和EventBus(otto).我实现此模式的全部原因是仅将事件与演示者分离,并让演示者更新视图.
这是我所拥有的一些代码的示例,我将以事件为例. (请注意,事件与EventBus事件不同,这意味着事件中的事件是“爸爸的生日”之类的事件,但EventBus中的事件是总线事件).
分段
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<Event> 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()); }}主持人
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()); }}订户
public class EventSubscriber extends Subscriber { // This class is registered on the event bus @Subscribe public voID onl oadEvents(LoadEvents loadEvents) { sClIEnt.getEvents(new Callback<List<Event>>() { @OverrIDe public voID onSuccess(List<Event> events, Response response) { EventBus.post(new EventsLoaded(events)); } @OverrIDe public voID onFailure(.....) { // Handle failure } }; }}如何让演示者和订阅者处理所有业务逻辑,并让Fragment只处理视图?
解决方法:
这不是最好的可能,但可能会帮助你.
在演示者中订阅事件,在其中有一个视图实例可以提供帮助.就像presenter从eventbus获取事件并调用适当的视图方法来更新UI.
请注意,我没有更改更新UI的片段的方法名称,并且直接从演示者传递了事件对象,而演示者现在确实是eventbus事件的订阅者.你可以相应地改变它.
分段 – –
public class EventFragment extends Fragment { private EventPresenter mEventPresenter; // Initialize boilerplate code... @OverrIDe public voID onResume() { mEventPresenter.onResume(); } @OverrIDe public voID onPause() { mEventPresenter.onPause(); } private voID init() { mEventPresenter = new EventPresenter(this); mEventPresenter.loadEvents(); } // I WANT TO MOVE THESE SUBSCRIPTION METHODS TO // MY PRESENTER OR SUBSCRIBER, BUT They ARE // COUPLED TO THE ADAPTER OR A VIEW public voID onEventsLoaded(EventsLoaded eventsLoaded) { List<Event> events = eventsLoaded.getEvents(); mAdapter.setEvents(events); } public voID onEventJoined(EventJoined eventJoined) { mItemVIEw.doAnimation(); mTextVIEw.setText("Leave"); mAdapter.joinEvent(eventJoined.getEvent()); } public voID onLeaveEvent(leftEvent leftEvent) { mItemVIEw.doAnimation(); mTextVIEw.setText("Join"); mAdapter.leftEvent(leftEvent.getEvent()); }}主持人 – –
public class EventPresenter { private EventFragment targetVIEw; public EventPresenter(EventFragment myVIEw) { targetVIEw = myVIEw; } // 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()); } @Subscribe public voID onEventsLoaded(EventsLoaded eventsLoaded) { targetVIEw.onEventsLoaded(eventsLoaded); } @Subscribe public voID onEventJoined(EventJoined eventJoined) { targetVIEw.onEventJoined(eventJoined); } @Subscribe public voID onLeaveEvent(leftEvent leftEvent) { targetVIEw.onLeaveEvent(leftEvent); } public voID onResume() { //subscrIDe event bus } public voID onPause() { //unsubscrIDe event bus } } 总结 以上是内存溢出为你收集整理的android – 模型视图Presenter与EventBus,如何将事件返回到Presenter?全部内容,希望文章能够帮你解决android – 模型视图Presenter与EventBus,如何将事件返回到Presenter?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)