首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Dialogs / AlertDialogs:如何在对话框启动时“阻止执行”(.NET风格)

Dialogs / AlertDialogs:如何在对话框启动时“阻止执行”(.NET风格)
EN

Stack Overflow用户
提问于 2018-03-19 00:08:23
回答 2查看 0关注 0票数 0

来自.NET环境我现在正在研究如何使用Dialogs在Android中工作。

在.NET中,调用MessageBox.Show(...)时会创建并显示一个弹出对话框。在对Show的调用中,我可以指定在弹出窗口中应该可用的按钮,例如:

代码语言:txt
复制
DialogResult myDialogResult = MessageBox.Show("My text here", "My caption here", MessageBoxButtons.YesNoCancel);

正如你所看到的,Show中的调用返回一个DialogResult,当在弹出窗口中按下一个按钮时,通知我点击了哪个按钮。请注意,在.NET中,在Show(...)调用所在的行停止执行,因此当按下按钮时它可以返回值。

如果我在上面的例子中按“否”,myDialogResult将等于

代码语言:txt
复制
myDialogResult == DialogResult.No

因为我发现使用/创建弹出窗口的.NET方式非常简单直观,所以我希望能够在Android中创建弹出窗口。

所以,问题是如果有人知道如何像MessageBox.Show一样“停止执行”,然后每当Button被按下(并且对话框消失)时返回一个值?

我需要暂停执行,并等待用户选择了一个按钮来单击弹出窗口。调用后显示对话框的代码取决于在对话框中单击了哪个按钮。

这就是为什么我不能使用Erich和Alex的建议,因为在onClick方法中编写代码如下所示是行不通的。原因是我无法继续“正常执行”。让我举个例子:

让我举个例子:

代码语言:txt
复制
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

如果我希望执行依赖于弹出窗口中的选择,我将不得不使用onClick方法在“正常执行”(在这种情况下为nextStep)中创建所有变量,这对我来说听起来像是地狱般的。

另一个明显的例子是一个弹出窗口,询问“是否要继续”选项“是”“否”

如果用户按下“是”,则应该中止整个方法,否则应该继续执行。你如何很好地解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2018-03-19 09:00:17

最大的原因是,如果你在显示对话框的时候阻塞了UI线程,你将会阻塞负责绘制和处理对话框事件的线程。这意味着您的对话框将无响应。如果用户需要几秒钟才能点击对话框,您还将导致ANR。

我们设计了Android来防止开发人员编写同步对话框,因此你没有太多选择余地。

票数 0
EN

Stack Overflow用户

发布于 2018-03-19 09:12:40

在Android中,这种结构不同于.NET:

代码语言:txt
复制
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Hello!")
       .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               // Handle Ok
           }
       })
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               // Handle Cancel
           }
       })
       .create();

会给你一个带有两个按钮的对话框,并用回调处理按钮点击。可能可以编写一些代码来使语法更接近.NET,但对话框的生命周期相互交织在一起Activity,所以最终它可能比它的价值更麻烦。其他对话框引用在这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档