2011-04-22 126 views
0

在我的活动中,我调用了onCreate()中的MyDialog(自定义对话框),并在Activity中处理其DismissListener以查找它是否被取消。如果它被取消,我完成活动,否则加载活动。在此加载期间,我想显示一个警报/进度对话框让用户知道它的加载,请稍候。但我无法看到对话框。这是我编码的方式:想在Activity的onCreate中显示AlertDialog - android

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ld = new AgreeDialog(this); 
    ld.setOnDismissListener(new OnDismissListener() { 
@Override 
public void onDismiss(DialogInterface dialog) { 
      if (ld.isCancelled) 
    MyActivity.this.finish(); 
     else { 
    //ProgressDialog pd = CreateLoadingDialog(); 
    //pd.show(); 
    //Log.i(TAG, "Before Load Is PD showing - " + pd.isShowing()); // Shows true 
      /* 
    AlertDialog.Builder adb = new AlertDialog.Builder(StartUltimate.this); 
    adb.setTitle("Loading..."); 
    adb.setCancelable(false); 
    AlertDialog ad = adb.create(); 
    ad.show(); 
    */ 
    MyActivity.this.showDialog(0); 
    LoadAfteAgree(); // This takes time sonetimes, so want a dialog while this is working 
    MyActivity.this.removeDialog(0); 

    //ad.dismiss(); 
       // pd.dismiss(); 
    //Log.i(TAG, "After Load Is PD showing - " + ad.isShowing()); // Shows false 
    } 
}   
    }); 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch(id) { 
    case 0: 
     loadingDlg = new ProgressDialog(this); 
     loadingDlg.setMessage("Loading..."); 
     loadingDlg.setCancelable(false); 
     loadingDlg.setIcon(R.drawable.icon); 
     return loadingDlg; 
    } 
    return null; 
} 

为什么我无法以任何方式看到任何对话?我也尝试在LoadAfterAgree()中调用它们,但也没有成功,结果相同。

任何帮助,高度赞赏。

谢谢

+0

如果看不到任何对话框,请尝试在“onStart()”方法中显示它。 – 2011-04-22 13:45:00

回答

4

你正在UI线程中执行你的长操作。将它们移到AsyncTask的doInBackground方法中。请参阅示例here

+3

要添加一点这个...屏幕不会开始绘制任何东西,直到onCreate()方法返回后(并且我相信在onStart()和onResume()之后)。所以你告诉系统显示它,做一些工作,然后在框架甚至调用任何布局和绘图函数之前隐藏它。总之,做弗拉基米尔所说的。 – Maximus 2011-04-22 14:17:21

3

要停止导致内存泄漏的对话框,请确保您的活动中包含以下内容:

AlertDialog _alert; 

    @Override 
    public void onPause() { 
     super.onPause(); 

     if(_alert != null) 
      _alert.dismiss(); 
    } 
+0

谢谢。不知道上面的代码是多么的高效,但是在我的Activity类中添加了,以避免任何窗口泄漏错误。 – Tvd 2012-12-15 09:39:18