我有一个带有NavigationDrawer的MainActivity。当我单击导航时,会创建一个新片段。通过单击下一个导航点,旧的将被删除,新的将添加一个事务。
有时我在导航点内打开一个新窗口。在这种情况下,我隐藏旧片段并添加一个新片段。现在我的问题:
我有一个带有editText的fragmentA。当我单击此editText字段时,将打开一个新的fragmentB。旧的fragmentA将被隐藏。 FragmentB有一个包含项目的列表。当我单击其中一个项目时,我想关闭此fragmentB并在fragmentA的editText中填充listItem的值。
我尝试了很多东西,但它没有用。
我使用Communicator界面将listitem信息传输到MainActivity。这样可行。然而,从Mainactivity到fragmentA的方式是问题
我不能将项值与Bundle参数放在一起,因为片段A已经存在。我试图调用存在于fragmentA中的公共函数,但每次我想从MainActivity调用此函数时都是不可能的,因为没有这样的函数。我不知道更新fragmentA中的editText并希望得到帮助。
抱歉我的英语不好。
答案 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具有以下优点:
当然应该提到这个缺点。它可能更容易"使用发布 - 订阅模式引入内存泄漏,因为对象按原样发送,并且可以比它应该更容易引用。
但我建议重新考虑您的方法并考虑使用消息总线,而不是在片段和您的Activity之间来回调用方法。