将数据从 Fragment 发送到 MainActivity
Sending data from Fragment to MainActivity
我的 MainActivity
中有一个 TextView
,MainActivity
中有一个 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",并且还使片段不可重复使用。
这个问题有两种常见的解决方案:
- 创建一个接口,其中包含Activity中的方法,可以被片段调用。在 Activity(所有使用片段的活动)中实现该接口,然后在片段中,使用 getActivity() 获取 Activity,并将其转换为接口。在这种模式中,通常还会检查(使用 'instanceof')Activity 是否实现了接口,如果没有实现则抛出 RuntimeException。
- 使用事件总线(例如 Square 的 Otto、GreenRobot 的 EventBus)在 Fragment 和它的父级之间进行通信 Activity。我觉得
这是最干净的解决方案,并且完全抽象了
Activity.
的片段
我的 MainActivity
中有一个 TextView
,MainActivity
中有一个 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",并且还使片段不可重复使用。
这个问题有两种常见的解决方案:
- 创建一个接口,其中包含Activity中的方法,可以被片段调用。在 Activity(所有使用片段的活动)中实现该接口,然后在片段中,使用 getActivity() 获取 Activity,并将其转换为接口。在这种模式中,通常还会检查(使用 'instanceof')Activity 是否实现了接口,如果没有实现则抛出 RuntimeException。
- 使用事件总线(例如 Square 的 Otto、GreenRobot 的 EventBus)在 Fragment 和它的父级之间进行通信 Activity。我觉得 这是最干净的解决方案,并且完全抽象了 Activity. 的片段