Android 片段间通信

Android 片段间通信,android,android-fragments,Android,Android Fragments,Android开发人员文档指出,应该通过实现接口来避免片段之间的直接通信。在进一步的搜索中,我发现这是因为它会导致片段之间的紧密耦合。我很难理解为什么它会导致紧密耦合,以及为什么这可能是一个问题 是否有人可以通过示例代码显示: 片段之间的直接通信将如何工作 为什么这种方法会有问题 如何使用接口来解决上述问题 Android片段通常被认为是MVP或MVC模式中的视图,它们不应该包含任何应用程序逻辑。片段中所有有意义的事件都应委派给演示者,这些演示者通常通过活动实现 假设您有一个片段a和一个片段B。

Android开发人员文档指出,应该通过实现接口来避免片段之间的直接通信。在进一步的搜索中,我发现这是因为它会导致片段之间的紧密耦合。我很难理解为什么它会导致紧密耦合,以及为什么这可能是一个问题

是否有人可以通过示例代码显示:

  • 片段之间的直接通信将如何工作
  • 为什么这种方法会有问题
  • 如何使用接口来解决上述问题

  • Android片段通常被认为是MVP或MVC模式中的视图,它们不应该包含任何应用程序逻辑。片段中所有有意义的事件都应委派给演示者,这些演示者通常通过
    活动
    实现

    假设您有一个片段
    a
    和一个片段
    B
    。片段
    A
    显示项目列表,片段
    B
    显示所选项目的详细信息。如果您直接传递片段,它将在它们之间创建一个紧密耦合,因为片段
    a
    需要一个具体的片段
    B
    引用来实例化它。如果您的应用程序需求发生变化,例如,通过显示片段
    C
    而不是
    B
    ,将弹出紧密耦合,您将不得不处理它。您可以通过在片段中引入
    Presenter
    Controller
    接口来避免这种耦合。通过调用此接口方法,可以确保presenter逻辑的实现与片段外观逻辑解耦


    有关开发解耦应用程序体系结构的更多信息,请参阅这篇文章

    “Android开发人员文档说明,应通过实现接口避免片段之间的直接通信”——您是否有此链接?“所有片段到片段的通信都是通过相关活动完成的。两个片段不应该直接通信。“这与你的问题不符。本质上,问题是片段应该是完全独立的。它们是模块化和可重用的。因此,如果您有一个活动,并且您想要使用某个片段,那么您不应该为了使用第一个片段而添加另一个片段。这就是我们应该避免的。使用接口可以使片段只将数据发送回父活动,而该活动负责对其执行某些操作。然后,活动可以处理该数据并将其分发到另一个片段,但片段之间不应该相互通信。基本上,您应该使用主机活动作为片段之间消息传递的代理,有点像事件总线。片段之间不需要特别了解彼此。他们只需要知道要发布哪些事件,活动才能传播到它包含的相关片段。这种间接级别可以防止片段深入到彼此的实现中,这将是脆弱的。