为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2019-10-17 16:05:48
来自.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-methodsAlertDialog.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另一个明显的示例是弹出窗口,询问“您是否要继续”,并带有选项“是”和“否”。如果用户按下“是”,则应中止整个方法,否则应继续执行。您如何很好地解决呢?
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

泰德(Ted),您实际上并不想这样做:)最大的原因是,如果在显示Dialog时阻塞UI线程,则会阻塞负责绘制和处理Dialog事件的线程。这意味着您的对话框将无响应。如果用户花费超过几秒钟的时间单击对话框,您还将导致ANR。

Erich的答案正是您所需要的。我知道这不是您想要的,但这没关系。我们设计Android的目的是防止开发人员编写同步对话框,因此您实际上没有太多选择。


查看完整回答
反对 回复 2019-10-17
?
忽然笑

TA贡献1806条经验 获得超5个赞

在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,因此,最后,麻烦可能超出其价值。其他对话框参考在这里。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信