我有两个片段Fragment A
和Fragment B
,两个片段都定义了interfaces
用于通信,ActivityMain
已经实现了两个接口。
Fragment A
public class FragmentA extends Fragment
{
public interface myInterface
{
doSomethingFromFragmentA();
}
private myInterface listener;
@Override OnAttach(Context activity)
{
listener=(myInterface) activity;
}
}
Fragment B
public class FragmentA extends Fragment
{
public interface myInterfaceforB
{
doSomethingFromFragmentB();
}
private myInterfaceforB listener;
@Override OnAttach(Context activity)
{
listener=(myInterfaceforB) activity;
}
private DialogFragment dialog=new DialogFragment()
{
@Override
public Dialog onCreateDialog(Bundle bundle)
{
//in this dialog creating a AlertDialog and calling doSomethingFromFragmentB() from dialog ok button
}
}
我已经展示了Fragments
的示例代码,您应该假设我已经在ActivityMain
中实现了接口。
您注意到我innerclass
中有一个FragmentB
,这是fragment
的另一种类型。在DialogFragment
的确定按钮中,我试图在FragmentB
上调用ActivityMain.
接口方法
我有两个问题:
1st:DialogFragment
位于FragmentB
内,因此FragmentB
是其父级,而不是ActivityMain
。从这种内部DialogFragment
调用接口实现的方法?这是如何在概念上与托管Activity
(在这种情况下为大父母)进行沟通的
Fragment null必须是要正确重新创建的公共静态类 来自实例状态
答案 0 :(得分:-1)
实现你自己的DialogFrament并要求你的实现构造函数有一个将在你的片段中触发的回调。
public class MyDialog extends DialogFragment{
MyInterface mi;
MyDialog(MyInterface mi){
this.mi = mi;
}
// on some action mi.yourCallBack();
}
因此,当您初始化对话框片段时,会向其传递一个接口,您将收到对您的片段的操作的回调。