Android MVP:一个 Activity 具有多个片段

Android MVP : One Activity with Multiple Fragments

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

流程如下:

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

在 MVP 之后,我为每个涉及的片段设置了 View 和 Presenter。我关心的是如何以 MVP 方式在 Fragment 和 Activity 之间进行通信。每个 Fragment 的结果都需要提供给 Activity 来决定接下来需要显示什么 Fragment。

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

什么是更好的方法?

正如您提到的,您想使用 MVP.According 与片段通信,我找到了 2 个解决方案。

解决方案一: 使用接口的回调,而不是创建一个接口并轰炸大量需要在 activity/fragment 上执行的方法。尝试创建多个接口并根据您的功能添加方法并根据您的用途实现它们。

方案二: 事件总线是另一种使用 MVP 的解决方案,您的视图在其中观察总线并接收事件。处理事件总线时要注意以下几点: 一种。如果您在片段的 Activity 中使用发布或订阅者,则应在其生命周期内注册和注销它们。否则,您很可能会遇到内存泄漏或悬空引用,从而导致您的应用程序崩溃。

b。小心 Fragment 之间的发布事件。当 Fragment 不是 运行 时,无法发布或接收事件。如果您有一个 Fragment 向另一个当前未执行的 Fragment 发布消息,然后将一个 Fragment 换成另一个,则事件很可能无法正确处理。 EventBus 库有办法重放这个事件,但 Otto 框架没有。

对于事件总线,您可以参考两个库: - GreenBot:https://github.com/greenrobot/EventBus - 奥托:http://www.vogella.com/tutorials/JavaLibrary-EventBusOtto/article.html

结论 如果你正在处理 Activity/Fragments 上的小操作,那么处理接口是更好的选择。事件总线可以提高您的应用程序性能,还可以增加事件总线对更大范围的依赖性。

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