如何在 do while 循环中连续显示 AlertDialog 直到满足特定条件?
How do I continuously show an AlertDialog in a do while loop until a certain condition is met?
我有一个 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",
object : DialogInterface.OnClickListener {
override fun onClick(dialogInterface: DialogInterface, 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) }
}
所以你可以在显示之前调用它来禁用它们,并在你的情况发生变化时再次调用它。您需要将对话框保留在 属性 中,以便您可以从条件发生变化的任何地方访问它。
我有一个 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",
object : DialogInterface.OnClickListener {
override fun onClick(dialogInterface: DialogInterface, 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) }
}
所以你可以在显示之前调用它来禁用它们,并在你的情况发生变化时再次调用它。您需要将对话框保留在 属性 中,以便您可以从条件发生变化的任何地方访问它。