将数据从 Fragment 发送到 MainActivity

Sending data from Fragment to MainActivity

我的 MainActivity 中有一个 TextViewMainActivity 中有一个 Button。当我单击 Button 时,我希望 TextView 说 "Button Clicked"。

这可能吗?

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

中的对象发送数据吗

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

抱歉,如果这不是适合 Whosebug 的问题类型。我是 Fragments 的新手,没能找到关于这个问题的明确解释。

提前致谢!

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

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

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

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

在Activity中:

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

当您单击片段中的按钮时调用它。

类似于:

来自片段:

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

未测试,但希望此方法有效。

当前接受的答案(在 Activity 中使用静态方法)既奇怪又可以说是 "wrong"。

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

这是错误的,因为片段必须了解其所在的特定 Activity。这是 "tight coupling",并且还使片段不可重复使用。

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

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