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

时间:2015-03-29 10:46:45

标签: java android android-fragments interface modularity

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

根据我对this question的答案的理解,活动A

  • 需要知道由F1F2

  • 托管的片段声明的每个接口
  • 需要将F1F2中的片段生成的事件路由到正确的主片段F1F2

    < / LI>

如果我理解正确,这种方法没有模块性:活动需要知道它所托管的片段(F1F2)的所有内容以及嵌套在{{{ 1}}和F1

我说错了吗?当然,我很困惑......

1 个答案:

答案 0 :(得分:5)

如果您查看Communicating with Other Fragments教程,就会说:

  

所有片段到片段的通信都是通过关联的方式完成的   活动。两个碎片永远不应该直接沟通。

这样做的原因是Fragment是流动的&amp;可能淡入和淡出视图的动态UI组件。只有托管Activity能够确定是否已将Fragment添加到用户界面或已与其分离。

  

如果我理解正确,这种方法没有模块化:   活动需要知道关于它的两个片段的一切   主持人(F1F2)以及嵌套在F1F2中的片段。

Fragment是&#34;模块化&#34;从某种意义上说,他们是完全独立的可重用的UI块。此外,他们是&#34;模块化&#34;因为它们的接口定义良好并由托管Activity明确实现。如果Fragment实现了Activity中定义的回调接口,那么您放置Fragment的任何地方,Activity&#34;选择&#34;该怎么做取决于是否添加/附加Fragment

如果我们在此处松散地应用MVC思维方式,则托管Activity充当controller两个views之间的Fragment种类getParentFragment()秒。当然这只是一个简单的比喻,但希望你能得到这样的结论。

进一步考虑:

这种方法有一种替代方法:一种名为Fragment的方法,嵌套的Fragment可用于获取对外部&#34;的引用。 {{1}}。

<强>参考文献:

1。 Why direct communication between fragments is not recommended?

2。 Communicating with other fragments or to activity

3。 Fragment question: inter-fragment communication?