由于来自.NET 环境,我现在希望了解在 Android 中 Dialogs 是如何工作的。
进去。NET,当调用创建并显示弹出对话框的 MessageBox.Show(...)
时。在对 Show 的调用中,我可以指定弹出窗口中应该有哪些按钮,例如:
DialogResult myDialogResult = MessageBox.Show("My text here", "My caption here", MessageBoxButtons.YesNoCancel);
如您所见,当弹出窗口中按下一个按钮时,Show 调用返回一个 DialogResult,通知我单击了哪个按钮。注意。NET 中,执行在调用 Show(...)
的行停止,因此当按下按钮时它可以返回值。
如果我在上面的例子中按“ No”,myDialogResult 将等于
myDialogResult == DialogResult.No
自从我发现。NET 的方式使用/创建弹出窗口非常容易和直观,我想这种方式创建弹出窗口在 Android 太。
因此,问题是是否有人知道如何像使用 MessageBox.Show
那样“暂停执行”,然后在按下按钮时返回一个值(对话框消失) ?
说得更清楚一点:
我需要的执行停止和等待,直到用户选择了一个按钮,以点击弹出式窗口。显示对话框的调用后面的代码取决于在对话框中单击了哪个按钮。
这就是为什么我不能使用 Erich 和 Alex 的建议,因为按照下面的建议在 onClick-method 中编写代码是行不通的。原因是我不能继续“正常执行”。让我举个例子:
让我举个例子:
int nextStep = 0; // this variable will not be reached from within the onClick-methods
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Hello!")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
nextStep = 1; // *** COMPILER ERROR!! ***
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
nextStep = 2; // *** COMPILER ERROR!! ***
}
})
.create().show();
if (nextStep == 1)
{
// then do some damage
}
else if (nextStep == 2
// dont do damage
如果我希望执行依赖于弹出窗口中的选择,我就必须设法使“正常执行”(在本例中为 nextStep
)中的所有变量都可以在 onClick-method 中使用,这对我来说就像地狱一样。
另一个明显的例子是弹出窗口询问带有选项 “是的”和 “不”的 “你还想继续吗”。
如果用户按“是”,整个方法应该被终止,否则它应该继续执行。你要怎么解决这个问题?