DialogFragment作为片段内的内部类(支持库片段v4)

时间:2016-12-18 17:58:17

标签: java android android-fragments

我有两个片段Fragment AFragment 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(在这种情况下为大父母)进行沟通的

第二:它也给了我错误,内部片段应该是静态的,因为一些片段保留问题,但是当我使它静态时,我还必须使监听器变量静态因为我在此DialogFragment中使用监听器变量。但它仍然给我以下错误

  

Fragment null必须是要正确重新创建的公共静态类   来自实例状态

1 个答案:

答案 0 :(得分:-1)

实现你自己的DialogFrament并要求你的实现构造函数有一个将在你的片段中触发的回调。

public class MyDialog extends DialogFragment{

MyInterface mi;

    MyDialog(MyInterface mi){
    this.mi = mi;
    }

    // on some action mi.yourCallBack();
    }

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