Android AlertDialog框未显示

时间:2011-02-19 17:49:35

标签: android alertdialog

我搜索了Stackoverflow,查看了Android Developer中的示例,以及一些书籍,我只是没有得到它。

我正在尝试显示一个中断程序流的AlertDialog Box。我见过的大多数例子都没有对话框后的代码,我需要程序停止执行,直到按下AlertDialog按钮。好像AlertDialog是从另一个线程创建的,我不知道如何检索该线程。

程序逻辑:如果解析不好,程序将强制关闭。我想让用户知道重新启动程序,一切都会正常工作。 (我正在删除并重新创建表格,并在程序重新开始时重新填充)

以下是一些代码:

if(database populated)
{
  ....code.....

  if(parseok.contentEquals("Error"))
  {
    doForceClose();
  }
displayDate = "Last: " + parseok;  //I don't want the program to continue to here.
//Rest of code in the method.  If I continue the program will Force Close
}
else
  do something else

这是AlertDialog方法:

private void doForceClose()
{
  String themessage = "Because some of the parameters have changed in the yada yada"; 

  AlertDialog.Builder ad = new AlertDialog.Builder (this);
  ad.setTitle("Internal Error");
  ad.setMessage(themessage);
  ad.setPositiveButton("Sorry", new OnClickListener()
  {
    public void onClick(DialogInterface dialog, int which)
    {
    finish();
    return;
    }
  });
  ad.create();
  ad.show();        
}

除了广告没有显示,程序继续强行关闭。

显然我没有得到什么。有什么想法吗?

编辑:我在一个扩展Activity

的类中

3 个答案:

答案 0 :(得分:6)

  

我正在尝试显示一个中断程序流的AlertDialog Box。

在Android和其他各种UI系统中都不存在。

  

我需要程序停止执行,直到按下AlertDialog按钮。

不,你没有。事件驱动的编程已经使用了几十年。

  

程序逻辑:如果解析不好,程序将强制关闭。

这是你的代码 - 重写它以表现得更好。

  

我不希望程序继续在这里。

然后使用elsereturn或其他内容。

  

除了广告没有显示,程序继续强行关闭。

在主应用程序线程再次获得控制权来处理您的请求之前,您的对话框不会出现 - show()是异步的。在此之前,你很可能会崩溃。

简而言之,您处理解析问题的策略存在根本缺陷。

答案 1 :(得分:2)

Commonsware的回复是正确的。让我试着用不同的话说同样的话。 警报对话框不会中断控制流。当程序等待输入时,它只是“左显示”。

因此序列 showAlert(“这是一条消息); showGallery(); 返回;

这只是暂时的。 解决这个问题的方法是将showGallery()函数调用放在来自AlertDialog的Positive响应中。

所以换句话说。如果你想用AlertDialog中断应用程序的流程(明智地指出这是错误的想法),那么在对话框之后将你想要执行的代码放入AlertDialog的onClick回调中。

答案 2 :(得分:0)

好的,我有类似的情况。我期待弹出一个对话框,但事实并非如此。相反,发生了异常。发生异常的地方位于我期待对话的地方后面几行。我修复了这个异常,然后我的对话框出现了。

看起来很奇怪,我认为对话框需要时间才能在程序继续运行时出现,然后程序会在对话框之前按时间顺序(但不是以编程方式)遇到异常。 这就是我修复异常位置后得到对话的原因。