繁体   English   中英

将数据从Fragment发送到MainActivity

[英]Sending data from Fragment to MainActivity

我的MainActivity有一个TextView ,而在与MainActivity相连的Fragment中有一个Button 当我单击Button我希望TextView说“按钮已单击”。

这可能吗?

我知道,连接到同一Activity两个Fragments可以轻松地相互通信并相互发送数据。 但是Fragment的对象可以将数据发送到Activity的对象Activity

使TextView其自己的Fragment并将其附加到Activity是更好的编程方法吗? 然后,我可以简单地让两个片段相互发送数据。

抱歉,如果这不是StackOverflow的正确类型。 我是Fragments新手,因此无法在此问题上找到清晰的解释。

提前致谢!

当前接受的答案(在“活动”中使用静态方法)既是奇数又是“错”。

静态方法的使用很奇怪,因为它不需要是静态的。

这是错误的,因为片段必须了解托管它的特定活动。 这是“紧密耦合”,并且还使得该片段不可重复使用。

有两种常见的解决方案:

  1. 在该Activity中创建一个包含该片段可以调用的方法的接口。 在Activity(使用片段的所有Activity)中实现该接口,然后在Fragment中使用getActivity()获取Activity,并将其强制转换为接口。 在这种模式下,通常还会检查(使用'instanceof')Activity是否实现了接口,如果没有实现,则抛出RuntimeException。
  2. 使用事件总线(例如Square的Otto,GreenRobot的EventBus)在Fragment和它的父Activity之间进行通信。 我觉得这是最干净的解决方案,并且将Fragment从其Activity中完全提取出来。

您可以在Activity中创建一个静态方法,该方法中将包含TextView。 而当您需要升级时,只需从片段中调用它即可。 就像是:

活动中:

public static void updateText(){
 //your textview
 text.setText("Button Clicked");
}

当您单击片段中的按钮时,只需调用它即可。

就像是:

从片段:

//Inside Button click listener
MainActivity.updateText();

尚未测试,但希望这种方法能奏效。

您是否尝试过getActivity()方法来检索对父活动的引用并使用一种方法来设置数据,例如:

// public final Activity getActivity ()
MyActivity activity = (MyActivity) getActivity();
activity.setText("...");

我可能是错的,但我会尝试的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM