将数据从Fragment发送到MainActivity

时间:2015-01-29 15:34:51

标签: java android object android-fragments

我的TextView中有一个MainActivity,而Button附加了一个Fragment MainActivity。当我点击Button我希望TextView说出来时,"按下Clicked"。

这可能吗?

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

中的对象

使TextView成为Fragment并将其附加到Activity是否更好?然后我可以简单地让两个片段相互发送数据。

很抱歉,如果这不是StackOverflow的正确问题类型。我是Fragments的新手,并且未能就此问题找到明确的解释。

提前致谢!

3 个答案:

答案 0 :(得分:4)

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

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

这是错误的,因为Fragment必须知道托管它的特定活动。这是“紧密耦合”,也使得片段不可重复使用。

这个问题有两种常见的解决方案:

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

答案 1 :(得分:1)

您可以在Activity中创建一个静态方法,其中包含TextView。当你需要更新时,只需从片段中调用它。 类似的东西:

活动:

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

只需点击片段中的按钮即可调用它。

类似的东西:

来自片段:

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

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

答案 2 :(得分:0)

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

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

我可能错了,但我会尝试。