代码之家  ›  专栏  ›  技术社区  ›  Antonio Sesto

Android为什么碎片不应该直接相互通信?

  •  6
  • Antonio Sesto  · 技术社区  · 9 年前

    我有一个 Activity A 托管两个主 Fragment F1 and F2 二者都 F1 F2 已嵌套 Fragment ,每个都有自己的 Listener 用于交换数据的接口。

    从我从答案到 this question ,活动 A :

    • 需要知道由 一层楼 地上二层

    • 需要路由中片段生成的事件 一层楼 地上二层 到正确的主片段, 一层楼 地上二层 .

    如果我理解正确的话,这种方法没有模块化:活动需要知道它所承载的两个片段的所有信息( 一层楼 地上二层 )以及嵌套在 一层楼 地上二层 .

    我说得对吗?当然,我很困惑。。。

    1 回复  |  直到 7 年前
        1
  •  6
  •   Community Ramakrishna.p    7 年前

    如果你看 Communicating with Other Fragments 教程,上面说:

    所有片段到片段的通信都是通过关联的 活动两个片段不应直接通信。

    原因是 Fragment s是流体&可以淡入淡出视图的动态UI组件。仅主机 Activity 能够确定 碎片 已添加到UI或已从UI分离。

    如果我理解正确,这种方法没有模块化: 该活动需要了解有关这两个片段的所有信息 主机( F1 F2 )以及嵌套在 一层楼 地上二层 .

    这个 碎片 s是“模块化”的,因为它们是完全独立的&可重用的UI块。此外,它们是“模块化”的,因为它们的接口是由宿主明确定义和实现的 活动 .你把它扔到哪里 碎片 在中,如果 活动 实现中定义的回调接口 碎片 ,然后 活动 根据 碎片 是否添加/附加到UI。

    如果我们松散地应用 MVC 这里的思维方式,主持人 活动 充当 controller 大约在两个之间 views 哪些是 碎片 s、 当然,这只是一个松散的类比,但希望你能理解。

    进一步考虑:

    有一种方法可以替代此方法: getParentFragment() 一个嵌套的 碎片 可以用于获取对“外部”的引用 碎片 .

    参考文献:

    1. Why direct communication between fragments is not recommended? .

    2. Communicating with other fragments or to activity .

    3. Fragment question: inter-fragment communication? .