Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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
Android 如何在另一个对话框被关闭后立即发布一个片段对话框,并且仍然保持后台堆栈?_Android_Android Fragments_Android Dialogfragment - Fatal编程技术网

Android 如何在另一个对话框被关闭后立即发布一个片段对话框,并且仍然保持后台堆栈?

Android 如何在另一个对话框被关闭后立即发布一个片段对话框,并且仍然保持后台堆栈?,android,android-fragments,android-dialogfragment,Android,Android Fragments,Android Dialogfragment,因此,我使用片段管理器来显示我的对话框,如下所示(这段代码随处可见,似乎来自google的一个示例): 其目的是,如果一个对话框显示在另一个对话框上,则保持对话框片段的后退 然而,在这个应用程序的一个流程中,我们希望先显示一个对话框,再显示另一个对话框。用户第一次点击“确定”,第二次点击“确定/取消” 在第一个对话框的onClick处理程序中,我调用dismise将其隐藏,然后调用一个回调,该回调将触发另一个DialogFragment(它调用showDialogFragment。类似于此(请注

因此,我使用片段管理器来显示我的对话框,如下所示(这段代码随处可见,似乎来自google的一个示例):

其目的是,如果一个对话框显示在另一个对话框上,则保持对话框片段的后退

然而,在这个应用程序的一个流程中,我们希望先显示一个对话框,再显示另一个对话框。用户第一次点击“确定”,第二次点击“确定/取消”

在第一个对话框的onClick处理程序中,我调用dismise将其隐藏,然后调用一个回调,该回调将触发另一个
DialogFragment
(它调用
showDialogFragment
。类似于此(请注意,
dismise
被记录为组织从片段管理器中删除片段):

问题是,在我显示秒数之后,如果我点击cancel或back,第一个似乎被添加到了后堆栈中。换句话说,在
showDialogFragment
中,“prev”不是空的,是我的第一个对话框。当像这样删除prev并添加到后堆栈时,它似乎忽略了它刚刚被取消的事实。Therefore当我点击“取消”或返回秒对话框时,我返回到第一个对话框!(似乎忽略了关闭)。有趣的是,再次重复此过程似乎可以正确关闭第一个对话框

关于
prev
是否有任何我可以/应该检查的内容,以查看它是否正在被解雇?(它似乎仍显示为附件,但不在继承人视图中)


我在下面的答案中提出了一个解决方案(使用0时间的延迟post)。

一个解决方案是使用0时间的延迟post从onClick处理程序调用回调:

.setPositiveButton(confirm,
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int whichButton)
            {
                AlertDialogFragment.this.dismiss();
                final Handler handler = new Handler();
                //posting with a delay allows the dialog to remove itself before we post the next one
                handler.postDelayed(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        if (listener != null)
                        {
                            listener.doPositiveClick(requestIdentifier, extraArgs);
                        }
                    }
                }, 0);

            }
        }
)
这似乎允许运行循环完成,并将对话框从片段管理器中正确删除

.setPositiveButton(confirm,
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int whichButton)
            {
                AlertDialogFragment.this.dismiss();
                if (listener != null)
                {
                    listener.doPositiveClick(requestIdentifier, extraArgs);
                }
            }
        }
)
.setPositiveButton(confirm,
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int whichButton)
            {
                AlertDialogFragment.this.dismiss();
                final Handler handler = new Handler();
                //posting with a delay allows the dialog to remove itself before we post the next one
                handler.postDelayed(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        if (listener != null)
                        {
                            listener.doPositiveClick(requestIdentifier, extraArgs);
                        }
                    }
                }, 0);

            }
        }
)