java - DialogFragment 作为 Fragment 内的内部类(支持库 Fragment v4)

标签 java android android-fragments

我有两个 fragment Fragment AFragment B ,两个 fragment 都定义了 interfaces用于通信和ActivityMain已经实现了这两个接口(interface)。

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 中实现了接口(interface).

你已经注意到我有一个 innerclassFragmentB这是 fragment 的另一种类型。在 DialogFragment我试图调用“确定”按钮FragmentB ActivityMain.上的接口(interface)方法 我有两个问题:

第一:DialogFragment在里面FragmentB ,所以FragmentB是它的父级,而不是 ActivityMain 。从这种内部调用接口(interface)实现的方法DialogFragment ?这在概念上如何与主机通信 Activity (在本例中为祖 parent )

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

Fragment null must be a public static class to be properly recreated from instance state

最佳答案

实现您自己的 DialogFrament 并要求您的实现构造函数具有将在您的 fragment 中触发的回调。

public class MyDialog extends DialogFragment{

MyInterface mi;

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

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

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

关于java - DialogFragment 作为 Fragment 内的内部类(支持库 Fragment v4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41211250/

相关文章:

android - PreferenceFragment 透明显示

android - 仅当 Fragment 在 ViewPager 中可见时才触发 RxJava 事件更改

java - 使用有限的内存构建和导出非常大的树结构

java - 安卓运行时 : FATAL EXCEPTION: main : application has stopped error

java - 带 || 的递归返回语句在里面

java - 如何在任何线程上从对话框中获取值?

java - 自定义对话与键盘 Android

android - 从通知栏打开时的两个 Activity 实例

android - 我什么时候应该在 fragment 中获得宽度 View

android - 从 SD 卡中检索特定图像