检查父片段是否实现了接口

时间:2017-04-04 16:52:38

标签: android android-fragments android-activity

我使用通过接口进行通信的嵌套片段。在过去,我将以下片段嵌套在一个活动中,我做了类似的事情:

ChildFragment.java

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        _mOnImageAvailableListener = (OnImageAvailableListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString()+" must implement onImageAvailable");
    }
}

但是,如果 ChildFragment.java 嵌套在 ParentFragment.java 中,我该如何确保 ParentFragment.java 实现OnImageAvailableListener

3 个答案:

答案 0 :(得分:1)

您可以使用方法getParentFragment()。像这样:

if (getParentFragment() instanceOf OnImageAvailableListener){
//do something
} else {
//throw an exception
}

答案 1 :(得分:1)

ChildFragment.java直接在您的活动中使用,如回调。

在你的活动中想想把这个代码按下按钮点击..

     FragmentManager fm = getSupportFragmentManager();
     ChildFragment childFragment= new ChildFragment();
     childFragment.show(fm, "Select Position");

在您的ChildFragment.java创建界面并附上活动外观。

private InterfaceName faceName;

public interface InterfaceName {
    void setPosition(int position);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    Activity activity;
    if (context instanceof Activity) {
        activity = (Activity) context;
        try {
            faceName= (InterfaceName ) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement Listener");
        }
    }
}

最后回复你的碎片。

faceName.setPosition(position, INDEX);

在您的活动中实现ChildFragment.InterfaceName并获得它的位置。

 @Override
public void setPosition(int position) {

 }

答案 2 :(得分:1)

在ParentFragment中,您应该使用getChildFragmentManager()而不是getFragmentManager()getActivity().getSupportFragmentManager()

在ChildFragment中你可以做到这一点

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if(getParentFragment() instanceof OnImageAvailableListener) {
        // cast and save it to instance variable..
    }
}