微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Android – 为什么使用接口被认为是在Activity和Fragment之间进行通信的最佳实践?

在本文档 “Communicating with Other Fragments”中,Google告诉我们,传递Activity和Fragment的最佳实践是实现一个接口.然后,此接口可以由Fragment调用并在Activity中执行必要的行为.

但也有一种黑客方式来做到这一点.通过方法“getActivity()”直接获取Activity,然后我们可以使用它下面的所有“公共方法”.

这让我很困惑.因为我无法想到使用黑客方式做任何这一点的任何关键缺点.

我头脑中出现的第一种方法的优点是:

>我可以在我的活动下限制“资源可访问性”.但由于Fragment能够调用“getActivity()”,因此它实际上可以访问其中的所有“公共”方法.所以这不能说服我.
>代码中更具可读性和故事性.使用第一种方法,代码告诉我们“此活动仅打开片段的这些特定可访问区域”.我们可以通过查看Activity中的代码直接知道“Fragment内部可能会干扰Activity的内容”.否则,我们需要打开Fragment下的代码来查看它的作用.

好吧,在我总结出这些之后,我对自己有点说服了.但坦率地说,我真的想要一些其他坚实的,并且必须有理由这样做.任何想法或文件将非常感谢!!

解决方法

最重要的是,主要优点是代码的模块化.当您从“子”类直接调用“父”类时,创建一个 cyclic dependency.这实际上意味着您无法替换一个,而不会更改另一个.这种方法经常导致意大利面条代码难以维护,甚至更难扩展,并且如果没有大的重构努力几乎不可能替换.

至于你的例子:如果你直接从Fragment调用你的Activity的公共方法,你将无法在没有实现hacky解决方案的情况下在其他活动中重用你的Fragment(比如if(getActivity()instanceof A){.. .} else {…}),也不能换掉你的活动,例如控制器类,或者你提出的任何其他解决方案.

如果您难以理解这个主题,我强烈建议您阅读本书Effective Java.

原文地址:https://www.jb51.cc/java/121027.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐