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

时间:2016-05-04 04:47:01

标签: java android android-fragments android-activity interface

我正在努力更好地理解接口,活动和碎片的相互作用。

根据this link from the Android documentation

  

通常你会想要一个片段与另一个片段进行通信   示例根据用户事件更改内容。所有   片段到片段的通信是通过相关联的   活动。两个碎片永远不应该直接沟通。

他们举了这个例子:

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的Button。我按下按钮,EditText的内容以某种方式被发送到Fragment3中的一个函数。

我的问题:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

((ParentFragment) getParentFragment ).doSomething();

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

答案 1 :(得分:1)

我希望有很多方法LocalBroadcastManager