我有一个Activity A
托管两个主Fragment F1 and F2
。 F1
和F2
都嵌套Fragment
,每个都有自己的Listener
接口,用于交换数据。
根据我对this question的答案的理解,活动A
:
需要知道由F1
和F2
需要将F1
和F2
中的片段生成的事件路由到正确的主片段F1
或F2
。
如果我理解正确,这种方法没有模块性:活动需要知道它所托管的片段(F1
和F2
)的所有内容以及嵌套在{{{ 1}}和F1
。
我说错了吗?当然,我很困惑......
答案 0 :(得分:5)
如果您查看Communicating with Other Fragments教程,就会说:
所有片段到片段的通信都是通过关联的方式完成的 活动。两个碎片永远不应该直接沟通。
这样做的原因是Fragment
是流动的&可能淡入和淡出视图的动态UI组件。只有托管Activity
能够确定是否已将Fragment
添加到用户界面或已与其分离。
如果我理解正确,这种方法没有模块化: 活动需要知道关于它的两个片段的一切 主持人(
F1
和F2
)以及嵌套在F1
和F2
中的片段。
Fragment
是"模块化"从某种意义上说,他们是完全独立的可重用的UI块。此外,他们是"模块化"因为它们的接口定义良好并由托管Activity
明确实现。如果Fragment
实现了Activity
中定义的回调接口,那么您放置Fragment
的任何地方,Activity
"选择"该怎么做取决于是否添加/附加Fragment
。
如果我们在此处松散地应用MVC
思维方式,则托管Activity
充当controller
两个views
之间的Fragment
种类getParentFragment()
秒。当然这只是一个简单的比喻,但希望你能得到这样的结论。
进一步考虑:
这种方法有一种替代方法:一种名为Fragment
的方法,嵌套的Fragment
可用于获取对外部"的引用。 {{1}}。
<强>参考文献:强>
1。 Why direct communication between fragments is not recommended?。