我使用通过接口进行通信的嵌套片段。在过去,我将以下片段嵌套在一个活动中,我做了类似的事情:
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
?
答案 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..
}
}