如何解决如何在 do while 循环中连续显示 AlertDialog 直到满足特定条件?
我有一个 AlertDialog
,我想至少向用户显示一次,然后即使在用户单击“确定”之后继续向用户显示对话框,直到满足特定条件。
这是我目前的 AlertDialog 代码结构:
do {
val dialogShow: AlertDialog.Builder = AlertDialog.Builder(this@MainActivity)
dialogShow.setCancelable(false)
dialogShow.setMessage("Message")
.setPositiveButton(
"ok",object : DialogInterface.OnClickListener {
override fun onClick(dialogInterface: DialogInterface,i: Int) {
if (checkCondition()) {
conditionMet = true
} else {
// Keep looping
}
}
})
.setNegativeButton(
"cancel",i: Int) {
conditionMet = true
return
}
})
dialogShow.show()
} while (conditionMet == false)
我现在面临的问题是 AlertDialog 将显示一次,但以后再也不会显示。即使 conditionMet = false
它仍然不会继续显示。如何在循环中继续显示相同的 AlertDialog
?
解决方法
通过将显示代码包装在循环中,您可以连续显示它。如果对话框被关闭,您可能想要执行的操作会重新显示对话框。所以像这个伪代码:
fun showObtrusiveDialog() {
...
dialog.setPositiveButton {
if(shouldStillBeObtrusive()) showObtrusiveDialog()
...
}.setNegativeButton {
...
}
dialog.show()
}
,
处理此问题的另一种方法是禁用按钮,直到您准备好允许用户关闭对话框为止。这是您可以在条件发生变化时调用的扩展函数:
fun AlertDialog.setAllButtonsState(enabled: Boolean) {
arrayOf(DialogInterface.BUTTON_POSITIVE,DialogInterface.BUTTON_NEGATIVE,DialogInterface.BUTTON_NEUTRAL)
.forEach { getButton(it)?.setEnabled(enabled) }
}
因此您可以在显示之前调用它来禁用它们,并在您的情况发生变化时再次调用它。您需要将对话框保留在一个属性中,以便您可以从任何条件发生更改的地方访问它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。