Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DialogFragment作为片段内的内部类(支持库片段v4)_Java_Android_Android Fragments - Fatal编程技术网

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();
    }

因此,当您初始化对话框片段时,将一个接口传递给它,您将收到一个对片段的操作的回调

第一个问题的答案是什么?不建议在片段中使用非默认构造函数