Android嵌套片段片段交互

时间:2014-08-28 22:06:57

标签: android android-activity android-fragments

片段片段交互的Android最佳做法(描述为herehere)强制Activity实现子片段定义的侦听器。然后Activity管理片段之间的通信。

从我的理解,这是为了保持碎片彼此松散耦合。然而,

  1. 嵌套片段的情况也是如此吗?我可以想象,嵌套片段直接向其父片段而不是活动片段报告可能是有意义的。< / p>

  2. 如果嵌套片段的父片段实现了它的侦听器,那么一个(或者应该是一个)如何要求父片段执行此操作。换句话说,类似于下面的范例,但Fragments

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }
    

3 个答案:

答案 0 :(得分:4)

如果有人想要一个实现示例来确保父上下文实现回调而不关心它是一个活动还是片段,那么以下内容对我有用:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof Callbacks) {
        mCallbacks = (Callbacks) context;
    } else {
        if (getParentFragment() != null && getParentFragment() instanceof Callbacks) {
            mCallbacks = (Callbacks) getParentFragment();
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement " + TAG + ".Callbacks");
        }
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mCallbacks = null;
}

享受!

答案 1 :(得分:1)

只要在片段中定义接口,就可以让父活动或父片段实现它。没有规则说片段不应该实现子片段的接口。这有意义的一个例子是片段A有两个子片段B,C。实现B的接口,当A获得回调时,它可能需要更新片段C.与活动完全相同,只是不同的级别。 / p>

答案 2 :(得分:0)

您可以使用getParentFragment()为子/父互动实现相同的模式。父片段指的是通过其ChildFragmentManager添加此片段的片段。如果此Fragment直接附加到Activity,则此方法返回null。