android– 模型视图Presenter与EventBus,如何将事件返回到Presenter?

android– 模型视图Presenter与EventBus,如何将事件返回到Presenter?,第1张

概述我正在使用Model-View-Presenter设计模式和EventBus(Otto).我实现此模式的全部原因是仅将事件与演示者分离,并让演示者更新视图.这是我所拥有的一些代码的示例,我将以事件为例.(请注意,事件与EventBus事件不同,这意味着事件中的事件是“爸爸的生日”之类的事件,但EventBus中的事

我正在使用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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1116175.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存