2010-09-02 80 views
0

我有一个很奇怪的问题,我无法到目前为止调试...... 事情是...我的应用程序需要下载一些工作。所以在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中绝对没有,我不能说出它的挂...只是看到该方法被调用,并应显示在对话框...

非常感谢您!

回答

1

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

0

使用.show()而不是.create()更新进度对话框。