2011-04-22 158 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