如何从活动中向现有隐藏片段发送参数

时间:2014-09-10 17:37:37

标签: java android android-fragments communication

我有一个带有NavigationDrawer的MainActivity。当我单击导航时,会创建一个新片段。通过单击下一个导航点,旧的将被删除,新的将添加一个事务。

有时我在导航点内打开一个新窗口。在这种情况下,我隐藏旧片段并添加一个新片段。现在我的问题:

我有一个带有editText的fragmentA。当我单击此editText字段时,将打开一个新的fragmentB。旧的fragmentA将被隐藏。 FragmentB有一个包含项目的列表。当我单击其中一个项目时,我想关闭此fragmentB并在fragmentA的editText中填充listItem的值。 我尝试了很多东西,但它没有用。
我使用Communicator界面将listitem信息传输到MainActivity。这样可行。然而,从Mainactivity到fragmentA的方式是问题 我不能将项值与Bundle参数放在一起,因为片段A已经存在。我试图调用存在于fragmentA中的公共函数,但每次我想从MainActivity调用此函数时都是不可能的,因为没有这样的函数。我不知道更新fragmentA中的editText并希望得到帮助。

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

好的,让我看看我是否理解,你有MainActivity和2个片段A和B.当你的MainActivity中的某些东西触发事务时,你想隐藏片段B,并显示片段A.但是,转移一些信息,生活在片段B中片段A,我是对吗?

然后,我知道你已经拥有了使用界面从B转移的MainActivity中的信息(这是正确的方法)。现在,您无法将该信息传递给片段A.

在提交事务之前,你必须实例化片段A,所以在提交之后你可以在A中调用公共方法来发送你的信息,对吧?如果这不起作用,可能是因为您可能在屏幕上存在之前尝试发送它。

无论如何,尝试分享一些代码,以弄清楚会发生什么。

答案 1 :(得分:0)

我曾经通过Activity进行通信(Activity寄存器监听器对Fragment 1和Fragment 1调用监听器方法,然后Activity调用Fragment 2等)。这有效,但非常麻烦且不灵活)。自从我搬到消息总线后,我再也没有回头。使用消息总线,您可以使用发布 - 订阅模式(http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)从任何组件发送到应用程序中的任何其他组件。

我正在使用EventBus(https://github.com/greenrobot/EventBus),但有其他实现,如Otto(https://github.com/square/otto)。 EventBus非常稳定(在我的任何应用程序中没有一次崩溃,我有很多用户)并且可靠。

与使用侦听器和回调方法相比,使用消息总线的IMO具有以下优点:

  • 与更实用的侦听器方法调用相比,消息始终是强制开发人员编写面向对象的对象
  • 它解耦了不同的组件。出版商和订阅者不必彼此了解。此外,活动(在您的情况下)不必知道片段之间的通信。解耦组件将使您的代码更精简,更易于阅读(和维护)。
  • 可以由任意组件使用。例如。我用EventBus消息替换了所有LocalBroadcastManager调用(EventBus比使用LocalBroadcastManager快得多)。如果组件不能直接相互访问(如对话框和首选项对象),则能够在任意组件之间进行通信是非常方便的。

当然应该提到这个缺点。它可能更容易"使用发布 - 订阅模式引入内存泄漏,因为对象按原样发送,并且可以比它应该更容易引用。

但我建议重新考虑您的方法并考虑使用消息总线,而不是在片段和您的Activity之间来回调用方法。