首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段-活动通信和片段间通信

片段-活动通信和片段间通信
EN

Stack Overflow用户
提问于 2012-09-04 19:41:47
回答 4查看 7.2K关注 0票数 4

关于片段之间通信的设计的一个问题,

为什么有人会使用一个有点复杂的回调模式来实现侦听器,而不是使用一个简单的静态方法(类似于对某些方法/属性使用Singleton )。有没有什么性能问题,或者“只是”Android/Java的一个糟糕的OO编程实践?因此,双向通信的最简单方法可能是:

代码语言:javascript
复制
MyActivity activity
    Fragment A
    Fragment B
static method canBeCalledFromAnywhere() {}
method activityMethod()
    call FragmentA.doSomething();
    call FragmentB.doSomething();



FragmentA
    onCreate()
        onMe = this;

static method doSomething()
    do something with static or use onMe for instance;

method oneMethodFragmentA()
    call MyActivity.canBeCalledFromAnywhere();



FragmentB
onCreate()
    onMe = this;

static method doSomething()
    do something with static or use onMe for instance;

method oneMethodFragmentB()
    call MyActivity.canBeCalledFromAnywhere();
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-04 19:50:55

最好使用明确指定的通信接口,而不是假设有一个。因此,如果您为通信定义了interface,那么:

  1. your Fragment可以很容易地检查父Activity是否实现了这个接口,所以Fragment将能够传达它的需求,
  2. 要定义接口,你需要考虑一下,而不是仅仅开始编码,这会导致某种标准化,这很好,
  3. 很容易维护接口的更新,因为如果你更改了接口,但没有as,编译器就会报错

您可能还想阅读this Android SDK article

票数 2
EN

Stack Overflow用户

发布于 2012-11-28 00:10:11

如果你有一个简单的片段/活动的用例场景,那么你的解决方案是可行的。不要总是听信java纯粹主义者所说的话--如果我们都这么做了,谁也做不成任何事。有时最好抛开常规,做最快、最容易做的事情--特别是如果它是一个小应用程序,而且有人付钱让你做。

票数 3
EN

Stack Overflow用户

发布于 2013-01-14 23:46:00

使用文档记录的回调和推荐模式的原因是,您将使用Android框架,而不是反对它。使用静态方法完全绕过了这一点,而且看起来很简单,但在两个层面上都存在问题。

首先,从面向对象的设计角度来看,您紧密耦合了具有完全不同和独立职责的类,这使得它们更难重用和重构。在fragment和activity类中引入的静态方法越多,这个问题就越严重。

其次,你在这两种类型的对象的生命周期之外工作,这会给你带来很多痛苦。首先,Android一直在销毁和重新创建碎片。例如,当你旋转你的设备,显示器从纵向模式变为横向模式时,你的所有碎片都会被销毁并重新创建-因为在横向模式下,你可能会使用不同的碎片或在相同的碎片中呈现不同的内容。当用户导航到新的活动或不同的应用程序时,片段和活动也可以暂停。

在片段和活动上创建静态方法,您可以在任何时候调用这些方法,并且您甚至不知道这样做时片段或活动是否可见。如果它是当前活动的一部分,你就不知道它处于生命周期的哪个阶段,因此你要么要写很多额外的代码来处理这个问题,要么什么都不写(并且有一个非常有buggy的应用程序)。

使用回调还意味着,在多片段活动中,您可以更容易地确保替代片段可用于替代布局,而父活动在决定使用哪个片段后,可以确保来自同级片段的数据被路由到正确的片段。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12262769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档