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