如何清空后栈?

How do I empty the back stack?

我正在使用 DialogFragment。我有三个对话框依次出现。

国家列表 --> 州列表 --> 地区列表

我在每个对话框中都有两个按钮,CancelOK。在显示下一个对话框之前,我将当前对话框放入堆栈。现在用户可以在 States List 对话框中按下 Cancel 按钮。我不希望他被带回国家列表对话框。我只是要退出对话。同样,我不希望在用户按下 OK 按钮时弹出堆叠对话框。我想优雅地结束对话并更新数据库。

我搜索了 SO 和 google 文档。我发现这应该通过以下方式实现:

FragmentManager ft = getFragmentManager();
ft.popBackStack("mydialog", FragmentManager.POP_BACK_STACK_INCLUSIVE);

但这对我不起作用。我试着把它放在 builder.setNegativeButton 里面,也放在 builder.setPositiveButton 里面。似乎没有任何效果。

这是我将它们放入堆栈的方式:

    RegionsDialogFragment dialogFragment = new RegionsDialogFragment ();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("mydialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);
    dialogFragment.show(ft, "mydialog");

谢谢

编辑

我好像没说清楚。我能够将对话框放入堆栈。那不是问题。问题是当我不再需要显示堆叠对话框时如何清空(不是弹出)返回堆栈?我不希望堆叠的对话框再次自行弹出。我希望他们死在堆栈上,不要回来。我想清空堆栈。 希望对你有帮助。

你不需要添加回栈对话框,如果你想关闭一个对话框,你应该使用:dimiss()方法。

注意: 您正在 addToBackStack() 方法

中设置 null

从您的代码中删除这一行

ft.addToBackStack(null);