Java DialogFragment作为片段内的内部类(支持库片段v4)
我有两个片段Java DialogFragment作为片段内的内部类(支持库片段v4),java,android,android-fragments,Java,Android,Android Fragments,我有两个片段片段A和片段B,这两个片段都定义了用于通信的接口,并且活动主实现了这两个接口 片段A的示例代码 public class FragmentA extends Fragment { public interface myInterface { doSomethingFromFragmentA(); } private myInterface listener; @Override OnAttach(Context activ
片段A
和片段B
,这两个片段都定义了用于通信的接口
,并且活动主
实现了这两个接口
片段A的示例代码
public class FragmentA extends Fragment
{
public interface myInterface
{
doSomethingFromFragmentA();
}
private myInterface listener;
@Override OnAttach(Context activity)
{
listener=(myInterface) activity;
}
}
片段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
}
}
我已经展示了两个片段的示例代码
,大家应该假设我已经在ActivityMain
中实现了接口
您已经注意到我在FragmentB
中有一个内部类
,它是片段
的另一种类型。在对话框fragment
的OK按钮中,我试图调用ActivityMain上的FragmentB
接口方法。
我有两个问题:
第一:DialogFragment
位于FragmentB
内部,因此FragmentB
是它的父项,而不是ActivityMain
。从这种内部对话框片段
调用接口实现的方法?在与主机活动
的通信中,这在概念上是如何工作的(在本例中为祖父母)
第二:由于某些片段保留问题,内部片段应该是静态的,这也给了我一个错误,但是当我将其设置为静态时,我还必须将侦听器变量设置为静态,因为我在这个DialogFragment中使用了侦听器变量。但它仍然给我以下的错误
片段null必须是公共静态类才能正确重新创建
从实例状态
实现您自己的DialogFrament,并要求您的实现构造函数有一个回调,该回调将在您的片段中触发
public class MyDialog extends DialogFragment{
MyInterface mi;
MyDialog(MyInterface mi){
this.mi = mi;
}
// on some action mi.yourCallBack();
}
因此,当您初始化对话框片段时,将一个接口传递给它,您将收到一个对片段的操作的回调 第一个问题的答案是什么?不建议在片段中使用非默认构造函数