android - 如何将数据从另一个 fragment 开始的 fragment 传输到 Activity

标签 android android-fragments android-activity

我有一个调用另一个 fragmentA 的 Activity 。现在这个 fragmentA 调用另一个 fragmentB。现在我想将数据从 fragmentB 传输到我的 Activity

最佳答案

检查这个:Communicating with Other Fragments

定义接口(interface)(在 fragment 中)

要允许 Fragment 与其 Activity 通信,您可以在 Fragment 类中定义一个接口(interface)并在 Activity 中实现它。 Fragment 在其 onAttach() 生命周期方法期间捕获接口(interface)实现,然后可以调用接口(interface)方法以便与 Activity 通信。

下面是 Fragment 到 Activity 通信的示例:

public class HeadlinesFragment extends ListFragment {
    OnHeadlineSelectedListener mCallback;

    // Container Activity must implement this interface
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }

    ...
}

现在 fragment 可以通过使用 OnHeadlineSelectedListener 接口(interface)的 mCallback 实例调用 onArticleSelected() 方法(或接口(interface)中的其他方法)来向 Activity 传递消息。

例如,当用户点击列表项时调用 fragment 中的以下方法。该 fragment 使用回调接口(interface)将事件传递给父 Activity 。

@Override
public void onListItemClick(ListView l, View v, int position, long id)   {
    // Send the event to the host activity
    mCallback.onArticleSelected(position);
}

实现接口(interface)(在 Activity 中)

为了从 fragment 接收​​事件回调,托管它的 Activity 必须实现 fragment 类中定义的接口(interface)。

例如,以下 Activity 实现了上述示例中的接口(interface)。

public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...

    public void onArticleSelected(int position) {
        // The user selected the headline of an article from the HeadlinesFragment
        // Do something here to display that article
    }
}

PS1:EventBus 适合您,但如果您需要,请谨慎使用它,它可能会使您的代码更难阅读。

PS2:不要在 Fragment.newInstance() 中传递 Activity 实例并使用它进行通信。 Activity 实例可能会在后台销毁。像示例一样在 Fragment.onAttach() 中获取 Activity 实例,框架将为您处理销毁、重新创建和重新绑定(bind)。

关于android - 如何将数据从另一个 fragment 开始的 fragment 传输到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915312/

相关文章:

android - Android 上的 FFmpeg

android - 在 Fragment 之间共享数据的更好方法是什么?

android - 尽可能长时间地防止 Activity 被破坏

android - 在其他选项卡中运行 Activity 。传递参数给它

安卓 : Open Multiple Chat Window for different users

android - onLayoutChange() 调用次数过多

android - 带重复的背景动画

android - 在代码中抑制 API 级警告

java - 如何在我的 Activity 中动态添加 fragment ?

android - EventBus 仅在放入 Handler 时有效