问题描述
我有这个功能,我需要根据用户在警报对话框中按下的内容(取消或保存)返回一个列表。
但我有一个问题,让我们假设我们有一个大小为 10 的列表。然后在该列表的迭代中,它将同时构建 10 个警报对话框,并在这些对话框的背景上产生一个深黑色阴影。
所以我想“暂停”直到用户按下或找到一种方法不要同时弹出所有这些警报对话框,并且在按下按钮时一个一个地出现。
问题:我该怎么做?
解决方法
如果你提供一些代码会更好。无论如何,即使这不是我会在 for 循环中创建 10 个对话框的事情,也可以做到。
只需在 for 循环中创建一个 Boolean
,用于检查对话框是否已关闭。
for(int i = 0; i < list.size(); ++i) {
Boolean isDismissed = false;
AlertDialog d = new AlertDialog(getBaseContext());
d.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
isDismissed = true;
}
});
//start your dialog
while(!isDismissed) {
//do nothing
}
}
正如我所说,我不会这样做。
因为我首先评估一个项目列表,然后我设置了一个新的项目列表,需要用户确认如何处理它,所以我循环使用警报对话框等待用户告诉我该怎么做与这些项目
有一个更好的方法来做到这一点。为什么不启动一个 CustomDialog
来询问用户如何处理这些项目。他可以使用 spinner
为每个项目选择选项,或者如果选项是 KEEP 或 DELETE,只需使用 checkbox
或其他东西。
正如人们所说,在循环中创建警报对话框是一种不好的做法,因此我对此的解决方案只是在 Fragment 上设置一个视图,该视图的作用类似于对话框,但我只是将其设置为可见并在需要时消失。对于我的情况,这似乎是一个合适的解决方案。
当用户接受或取消视图(单击按钮)时,只需将其发送到视图模型,视图模型将评估列表中是否仍有项目。如果有项目,则在 Fragment 上再次显示此“视图”,询问用户要做什么:)
我没有要展示的代码,因为我还没有完成,但我想了一段时间,这是我能想到的最好的。希望对遇到同样情况的人有所帮助!