我有两个片段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实现了接口。
您已经注意到我在FragmentB中有一个FragmentB,这是另一种类型的fragment。在DialogFragment的OK按钮中,我试图在ActivityMain.上调用FragmentB接口方法,我有两个问题:
第一:DialogFragment在FragmentB内部,所以FragmentB是它的父级,而不是ActivityMain。从这种内部DialogFragment调用接口的实现方法?在与主机Activity的通信中,这是如何在概念上工作的(本例中为大父级)
第二:由于某些片段保留问题,内部片段应该是静态的,这也给了我错误,但是当我使它是静态的时,我还必须使侦听器变量静态,因为我在这个DialogFragment中使用侦听器变量。但它还是给了我以下的错误
片段空必须是公共静态类,才能从实例状态正确地重新创建。
发布于 2016-12-18 19:03:49
实现您自己的DialogFrament,并要求您的实现构造函数有一个回调,该回调将在您的片段中触发。
public class MyDialog extends DialogFragment{
MyInterface mi;
MyDialog(MyInterface mi){
this.mi = mi;
}
// on some action mi.yourCallBack();
}因此,当您初始化您的对话框片段时,向它传递一个接口,您将收到对您的片段的操作的回调。
https://stackoverflow.com/questions/41211250
复制相似问题