我有一个Activity,它托管多个片段,用于定义用户注册流程中的每个步骤。流程很复杂,下一步由前面步骤中的用户操作定义。
流程如下:
MainActivity | Fragment1 --> Fragment2 --> Fragment3 --> Fragment4
\
--> Fragment5 --> Fragment6
按照MVP,我有View&涉及每个片段的演示者。我关心的是如何以MVP方式在Fragment和Activity之间进行通信。每个片段的结果都需要可供活动使用,以决定接下来需要显示的片段。
我想到的一种方法是为Activity实现的每个片段定义一个监听器。我不知何故觉得这有点难看,因为最终Activity需要实现其中的6个并且看起来不可扩展。
什么是更好的方法?
答案 0 :(得分:6)
答案 1 :(得分:4)
正如您所说,您希望使用MVP与片段进行通信。据我所知,我找到了2个解决方案。
解决方案1: 使用接口进行回调,而不是创建一个接口和轰炸需要对活动/片段执行的许多方法。尝试创建多个接口&根据您的功能添加方法&根据您的用途实施。
解决方案2: 事件总线是使用MVP的另一种解决方案,您的视图可以观察总线&拿起活动。在处理事件总线时要注意以下几点: 一个。如果您在片段活动中使用发布或订阅者,则应在其生命周期中注册和取消注册。否则,您可能会遇到可能导致应用程序崩溃的内存泄漏或悬空引用。
湾警惕在Fragments之间发布事件。当Fragment未运行时,无法发布或接收事件。如果您有一个Fragment将消息发布到当前没有执行的另一个Fragment,然后将一个消息交换给另一个,则可能无法正确处理该事件。 EventBus库有一种重放此事件的方法,但Otto框架没有。
对于Event Bus,您可以引用两个库: - GreenBot:https://github.com/greenrobot/EventBus - 奥托:http://www.vogella.com/tutorials/JavaLibrary-EventBusOtto/article.html
<强>结论强> 如果您正在处理Activity / Fragments上的小操作,那么处理接口是更好的选择。事件总线可以提高您的应用程序性能,也可以增加您可以用于事件总线的更大范围的依赖性。