对话框/ AlertDialogs:如何在对话框启动时“阻止执行”(.NET样式)

来自.NET环境,我现在想了解Dialogs如何在Android中工作。


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


DialogResult myDialogResult = MessageBox.Show("My text here", "My caption here", MessageBoxButtons.YesNoCancel);

如您所见,在弹出窗口中按下按钮时,对Show的调用将返回DialogResult,通知我单击了哪个按钮。请注意,在.NET中,执行将在对其进行调用的行处暂停Show(...),因此在按下按钮时它可以返回该值。


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


myDialogResult == DialogResult.No

由于我发现使用/创建弹出窗口的.NET方法非常简单直观,因此我也希望在Android中使用这种创建弹出窗口的方法。


因此,问题是,是否有人知道如何像一样“暂停执行” MessageBox.Show,然后每当按下Button(然后对话框消失)时返回一个值?


编辑1

更清楚一点:


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


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


让我举个例子:


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

如果我希望执行依赖于弹出窗口中的选择,那么我将不得不以某种方式使nextSteponClick方法中的“正常执行”(在本例中为)中的所有变量可用,这对我来说听起来像是“地狱”。


编辑2

另一个明显的示例是弹出窗口,询问“您是否要继续”,并带有选项“是”和“否”。


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


叮当猫咪
浏览 505回答 3
3回答

慕标琳琳

泰德(Ted),您实际上并不想这样做:)最大的原因是,如果在显示Dialog时阻塞UI线程,则会阻塞负责绘制和处理Dialog事件的线程。这意味着您的对话框将无响应。如果用户花费超过几秒钟的时间单击对话框,您还将导致ANR。Erich的答案正是您所需要的。我知道这不是您想要的,但这没关系。我们设计Android的目的是防止开发人员编写同步对话框,因此您实际上没有太多选择。

忽然笑

在Android中,结构与.NET不同: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,因此,最后,麻烦可能超出其价值。其他对话框参考在这里。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android