Android MVP:一个包含多个片段的活动

时间:2017-01-11 10:12:48

标签: android android-fragments mvp

我有一个Activity,它托管多个片段,用于定义用户注册流程中的每个步骤。流程很复杂,下一步由前面步骤中的用户操作定义。

流程如下:

MainActivity | Fragment1 --> Fragment2 --> Fragment3 --> Fragment4
                                       \
                                        --> Fragment5 --> Fragment6

按照MVP,我有View&涉及每个片段的演示者。我关心的是如何以MVP方式在Fragment和Activity之间进行通信。每个片段的结果都需要可供活动使用,以决定接下来需要显示的片段。

我想到的一种方法是为Activity实现的每个片段定义一个监听器。我不知何故觉得这有点难看,因为最终Activity需要实现其中的6个并且看起来不可扩展。

什么是更好的方法?

2 个答案:

答案 0 :(得分:6)

在我的项目中,我使用的事实是每个Fragment都可以访问父Activity。我的解决方案是:

enter image description here

答案 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上的小操作,那么处理接口是更好的选择。事件总线可以提高您的应用程序性能,也可以增加您可以用于事件总线的更大范围的依赖性。