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

Ant*_*sto 6 java android modularity interface android-fragments

Activity A主持两个主要Fragment F1 and F2.无论F1F2嵌套Fragment,每个都有自己的Listener接口进行数据交换.

根据我从这个问题的答案中理解,活动A:

  • 需要知道由F1和托管的片段声明的每个单独的接口F2

  • 需要路线在由片段生成的事件F1F2以正确的主要片段,F1F2.

如果我理解正确的,存在这种方法不模块化:活动需要了解两个它承载(片段一切F1F2),并嵌套在碎片F1F2.

我对么?当然,我很困惑......

Y.S*_*Y.S 6

如果你看一下Communicating with Other Fragments教程,它会说:

所有Fragment-to-Fragment通信都是通过相关的Activity完成的.两个碎片永远不应该直接通信.

原因是Fragments是流畅的和动态的UI组件,可能会淡入和淡出视图.只有托管Activity才能确定是否Fragment已将UI添加到UI或已从中分离.

如果我理解正确的,存在这种方法不模块化:活动需要了解两个它承载(片段一切F1F2),并嵌套在碎片F1F2.

Fragments为"模块化"在这个意义上,他们是完全独立的和可重复使用的UI块.此外,它们是"模块化的",因为它们的接口定义明确并由主机明确实现Activity.Fragment放入其中的任何地方,如果Activity实现了在其中定义的回调接口Fragment,则Activity"选择"要做什么,具体取决于是否Fragment添加/附加到UI.

如果我们松散的应用MVC思维这里,托管的方式Activity充当controller各种各样的两者之间views哪个是Fragment秒.当然,这只是一个简单的比喻,但希望你能得到它.

进一步考虑:

这种方法有一种替代方法:一种称为getParentFragment()嵌套的方法Fragment可以用来获取对"外部"的引用Fragment.

参考文献:

1. 为什么不推荐片段之间的直接通信?.

2. 与其他片段或活动进行交流.

3. 片段问题:片段间通信?.

  • 谢谢,这就是我的理解.它不是很优雅:如果活动有一个片段(或更多)托管100个片段,当这些接口仅用于主片段及其子片段之间的通信时,活动需要实现100个不同的接口. (2认同)