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代码>如果有帮助的话