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

时间:2015-06-25 19:21:10

标签: android android-fragments

关于如何通过Fragments使用interface和事件回调方法让两个Activity相互通信,有很多线索。 这样做有什么特别的理由吗?或者这样做是否有任何缺点 - directly calling method of fragment-2 from fragment-1

 ((Fragment2) (getActivity().getFragmentManager().findFragmentById(R.id.fragment2))).methodOfFragment2();

2 个答案:

答案 0 :(得分:4)

不幸的是,很多教程中的活动界面并没有给人们一个很好的模型来实际制作他们的片段模块化。

大多数人最终做的是将他们的活动 - 界面连接到一些中央存储库,用于硬编码之间的关系。因此,当我第一次启动usnig片段并阅读这个"模型"我也很想知道它的价值,因为我只是在片段关系上引入了一层间接。

加班我学习或改编了模式,比如我的片段的广播/接收器模型。现在,我的片段不通过活动界面进行通信,而是通过本地广播对象在事件频率上广播事件,并且对这些事件感兴趣的其他对象可以注册接收这些事件和数据。

换句话说,我的片段有事件,他们通常使用有效负载发布这些事件,而其他对象可以注册以接收来自这些事件的通知和数据。如果没有人倾听,没有任何反应。如果我写了一些想要从事件中接收数据的新对象,我的其他片段甚至是我的广播公司都不需要了解我的新对象如何实现的具体细节。

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

http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

how to use LocalBroadcastManager?

答案 1 :(得分:3)

因为假设片段能够被重用。如果您正在调用应用程序的一个实例中存在的片段,并且您在应用程序的另一部分中重用其中一个片段而不是另一部分,则猜猜您刚刚打破了应用程序尝试调用不存在的内容。

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