Java 如何在深度嵌套链中的片段之间进行通信?

Java 如何在深度嵌套链中的片段之间进行通信?,java,android,android-fragments,android-activity,interface,Java,Android,Android Fragments,Android Activity,Interface,我试图更好地理解接口、活动和片段之间的相互作用 根据: 通常,您希望一个片段与另一个片段通信,例如 基于用户事件更改内容的示例。全部的 片段到片段的通信是通过相关的 活动。两个片段不应该直接通信 他们举了一个例子: public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; // Container Activity must implement this

我试图更好地理解接口、活动和片段之间的相互作用

根据:

通常,您希望一个片段与另一个片段通信,例如 基于用户事件更改内容的示例。全部的 片段到片段的通信是通过相关的 活动。两个片段不应该直接通信

他们举了一个例子:

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");
        }
    }

    ...
}
如果处理的是嵌套的片段链,那么这种情况会发生什么变化

例如,假设我有一个活动,其中包含一个片段,然后该片段包含另一个片段,以此类推

Activity --> Fragment1 --> Fragment2 --> Fragment3 --> Fragment4 --> Fragment5
我正在努力了解执行以下操作的公认最佳实践:

假设Fragment5有一个EditText和一个带有OnClickListener的按钮。我按下按钮,编辑文本的内容会以某种方式发送到Fragment3中的函数。

我的问题:

我假设我们需要在Fragment5中定义一个接口/侦听器,就像上面的示例一样,这意味着前面的活动应该实现该接口,因为根据文档,活动应该在片段之间传递信息


但是现在,从这个活动中,我们如何将信息传递给Fragment3?

文档中提到的是兄弟片段到片段的通信。他们应该通过父活动进行沟通

对于子片段到父片段的通信,您可以直接通信

((ParentFragment) getParentFragment ).doSomething();

您可以有一个接口,让父片段实现它。然后子片段可以通过接口与父片段通信,而无需直接与另一个片段通信。

该文档是关于兄弟片段到片段通信的。他们应该通过父活动进行沟通

对于子片段到父片段的通信,您可以直接通信

((ParentFragment) getParentFragment ).doSomething();

您可以有一个接口,让父片段实现它。然后,子片段可以通过接口与父片段通信,而无需直接与另一个片段通信。

我更愿意采用很多方法

有很多我更喜欢的方法

用新片段替换旧片段时,使用
Bundle
传输数据
setArguments
将在这方面对您有所帮助。@AnshulTyagi这与我的问题无关——我不是在问工厂模式。我想问的是如何将一个子片段的信息传输给几个家长。当您用新片段替换旧片段时,您可以使用第三方库(如Ottouse
Bundle
)来传输数据
setArguments
将帮助您。@AnshulTyagi这与我的问题无关——我不是问工厂的问题图案我想问的是如何将信息从一个子片段传输到几个父片段。您可以使用Ottob之类的第三方库,但这是否意味着子片段假设它包含在父片段(而不是父活动)中,违反了模块化原则?对于同级父片段,活动控制片段。活动是所有同级片段的直接父级。因此,我们可以将数据从一个片段路由到另一个片段。这在嵌套片段的情况下是不可行的。Activity不知道其子级的子片段。但这是否意味着子级片段假定它由父级片段(与父级活动相反)包含,违反了模块化原则?对于同级父级,Activity控制片段。活动是所有同级片段的直接父级。因此,我们可以将数据从一个片段路由到另一个片段。这在嵌套片段的情况下是不可行的。活动不知道其子级的子片段。