Android:为什么片段之间的通信应该通过活动进行?

Android:为什么片段之间的通信应该通过活动进行?,android,android-fragments,Android,Android Fragments,关于如何通过活动使用接口和事件回调方法使两个片段相互通信,有很多线程。 这样做有什么具体的原因吗?或者,这样做有什么不利之处吗?直接从fragment-1调用fragment-2的方法 因为假定片段能够被重用。如果您正在调用应用程序的一个实例中存在的片段,并且您在应用程序的另一个部分中重用了其中一个片段,但在另一个部分中没有重用,那么猜猜您刚刚破坏了应用程序,试图调用不存在的某个片段 片段不应该知道存在另一个片段,这就是为什么所有通信都应该通过一个活动进行的原因不幸的是,许多教程中的活动界面并没

关于如何通过活动使用接口和事件回调方法使两个片段相互通信,有很多线程。 这样做有什么具体的原因吗?或者,这样做有什么不利之处吗?直接从fragment-1调用fragment-2的方法


因为假定片段能够被重用。如果您正在调用应用程序的一个实例中存在的片段,并且您在应用程序的另一个部分中重用了其中一个片段,但在另一个部分中没有重用,那么猜猜您刚刚破坏了应用程序,试图调用不存在的某个片段


片段不应该知道存在另一个片段,这就是为什么所有通信都应该通过一个活动进行的原因

不幸的是,许多教程中的活动界面并没有为人们提供一个很好的模型来实际使片段模块化

大多数人最终要做的是使他们的活动界面成为一个中央存储库,用于硬编码片段之间的关系。因此,当我第一次开始使用usnig片段并阅读关于这个模型的文章时,我也对它的价值感到好奇,因为我只是在片段关系上引入了一个间接层

随着时间的推移,我学习或调整了模式,如广播/接收器模式,以适应我的片段。现在,我的片段不通过activity接口进行通信,而是通过本地广播对象以事件频率广播事件和有效负载,其他对这些事件感兴趣的对象可以注册以接收这些事件和数据

换句话说,我的片段有事件,它们发布这些事件,通常带有有效负载,其他对象可以注册以接收来自这些事件的通知和数据。如果没有人在听,什么也不会发生。如果我编写了一些新对象,希望从事件中接收数据,那么我的其他片段甚至广播员都不需要知道新对象是如何实现的

如果您想了解更多有关广播接收器型号的信息,Android有自己的LocalBroadcastManager,或者您可以编写自己的轻量级管理器,您可以在这里找到一些关于如何使用它的教程:


考虑到android的一些经验,我觉得在这行代码中出现某种失败的可能性相当高。它还将两个片段紧密耦合在一起,如果其中一个片段存在,那么另一个片段也必须始终存在。假设fragment2存在,并且与第一个片段处于同一活动中。在许多情况下,它可能不存在,因为它还没有被创建,或者它曾经存在,但通过FragmentTransaction被删除,或者没有足够的屏幕空间,因此片段将由另一个活动显示,等等。
 ((Fragment2) (getActivity().getFragmentManager().findFragmentById(R.id.fragment2))).methodOfFragment2();