在另一个对话框后显示对话框:HANGS

时间:2010-09-02 15:56:01

标签: java android dialog

我有一个非常奇怪的问题,到目前为止我无法调试... 事情是...我的应用程序需要下载一些工作。所以在onCreate()方法的开头,我检查是否已经下载了某些内容。如果没有,我弹出一个对话框,要求用户下载它。

if (!isInstalled) {
            showDialog(DIALOG_INSTALL);
        } else {
            start();
        }

其中start()方法执行其他操作。现在,showDialog称之为:

builder = new AlertDialog.Builder(MyApp.this);
        builder.setMessage("Would you like to install...")
        .setCancelable(false)
        .setPositiveButton("Install", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
                aManager.install(MyApp.this);
            }
        });
        dialog = builder.create();
        return dialog;

我的对话框显示,我点击,所以调用aManager.install()。我正在传递上下文,因为aManager.install()弹出一个ProgressDialog来显示下载进度并生成一个新的线程,其中下载了所有内容。所以很明显在创建对话框之前,我让Handler接收来自aManager.install()的响应。响应可能会有所不同,因为例如互联网连接不可用(异常引发和捕获以及使用不同代码调用侦听器)。

现在,当发生这种情况时(Exception)我想调用另一个对话框,说“出了问题,你想重试一次吗?”......所以另外调用showDialog(DIALOG_REINSTALL)(这次用另一个代码)。 事情是... showDialog()被调用(我可以通过记录验证这一点),但对话框没有显示。相反,我的应用程序只是悬挂!?!?!?

有人知道为什么会这样做????没有异常提出,logcat完全没有任何异常,我无法告诉它挂在哪里...只是看到方法被调用并且对话框应该显示...

非常感谢!!

2 个答案:

答案 0 :(得分:1)

看起来你有一个僵局。我会将下载代码放在单独的线程上,例如使用AsyncTask。在task.onPreExecute()中,您可以解除第一个对话框并弹出您通过覆盖task.onProgressUpdate()

更新的进度对话框

答案 1 :(得分:0)

使用.show()代替.create()