Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查父片段是否实现了接口_Android_Android Fragments_Android Activity - Fatal编程技术网

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

Android 检查父片段是否实现了接口,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我使用的是通过接口进行通信的嵌套片段。在过去,我在活动中嵌套了以下片段,我做了如下操作: if (getParentFragment() instanceOf OnImageAvailableListener){ //do something } else { //throw an exception } ChildFragment.java @Override public void onAttach(Context context) { super.onAttach(context

我使用的是通过接口进行通信的嵌套片段。在过去,我在活动中嵌套了以下片段,我做了如下操作:

if (getParentFragment() instanceOf OnImageAvailableListener){
//do something
} else {
//throw an exception
}
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

您可以使用方法
getParentFragment()
。大概是这样的:

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

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) {

 }

在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..
    }
}

getParentFragment()
返回
null
将其移动到
onActivityCreated()
方法或
onViewCreated()
仍返回
null
hmn,可能是
getParent()
工作,我不知道您的代码是如何工作的。
getParent()
不是一回事。我正在使用
导入android.support.v4.app.Fragment如果有帮助的话