片段之间的通信

4

为什么我应该使用与其他片段通信模式,而不是简单地使用

((MyActivity)getActivity()).doFoo();

在我的Fragment中?


一个非常好的问题。在我看来,你很快就会得到一个非常高的分数。 - Snicolas
4个回答

5

这实际上是关于耦合和可重用性的问题。

如果您在问题中使用了您发布的代码示例,那么您的Fragment将无法与其他活动一起重用。它是'紧密耦合'的。如果您是在自己工作,并且您认为没有人会在以后使用或阅读您的代码(包括您自己),并且您绝对不需要在其他地方使用该Fragment,那么这很好。但一般来说,您仍然应该使用正确的模式,只是为了养成使用习惯。

如果您在公司编写代码,则保持“松散耦合”将在长期内对您和同事有很大帮助,并意味着如果需要,在以后的项目中可以直接返回您的代码并重用它。


2
因为它会在 Fragment 和 Activity 之间创建强烈的直接耦合,从而降低 Fragment 的可重用性:你只能将其与此 Activity 一起使用。
使用接口来调解通信更加灵活,因为多个 Activity 现在都可以嵌入你的 Fragment,它们只需实现通信接口即可。
这在程序执行方面是等效的,但它是一个更好的设计,非常接近于 Observable-Observer 设计模式
还要注意,它们有替代解决方案: 这些解决方案甚至更加清晰,将导致更优雅的代码。

0

片段之间的通信应该只通过活动进行。 ((MyActivity)getActivity()).doFoo() - 将调用活动中的方法,然后更新其他片段

片段应该仅由活动控制。比如说,如果一个片段有直接的方式与另一个片段通信,那么就有可能出现一个片段被从其他片段分离而活动不知道的情况。


0
当您调用((MyActivity)getActivity()).doFoo()时,您正在向下转型您的对象,并且如果包含的Activity不是MyActivity的实例,则可能会遇到RuntimeException。直接调用意味着Fragment与Activity紧密耦合。许多人认为这不是一件好事情
当您按照链接中描述的方式实现接口时,除非传递了已实现该接口的对象,否则无法构建应用程序。 这意味着,如果您在其他地方使用该片段,则消除了RuntimeException的风险,因为它是强类型的。
这里有一个问题解释为什么强类型是好的,紧密耦合是不好的

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接