2011-02-10 77 views
2

創建對話框內對話框我有一對夫婦一個對話框內對話框被拋出的異常:異常android系統

02-10 15:52:45.592: ERROR/AndroidRuntime(321): java.lang.IllegalArgumentException: Activity#onCreateDialog did not create a dialog for id 2 

的代碼是:

dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

       .... 

      showDialog(ID_DIALOG_SEND); 

對話框定義如下:

@Override 
protected Dialog onCreateDialog(int id) { 
     switch (id) { 

    case ID_DIALOG_SEND: 

     ProgressDialog loadingDialog = new ProgressDialog(this); 
     loadingDialog.setMessage("Sending..."); 
     loadingDialog.setIndeterminate(true); 
     loadingDialog.setCancelable(false); 
     return null; 
     .... 

而且它不會爲這個對話中使用的工作:

Builder b = new AlertDialog.Builder(this); 

case ID_DIALOG_ERR: 
b.setMessage("Error") 
     .setCancelable(false) 
     .setPositiveButton("OK", 
      new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }); 
     return null; 

任何提示?

感謝

回答

1

因爲你想在一個匿名內部類中使用showDialog(ID_DIALOG_SEND);,它會給你一個問題,因爲它認爲ShowDialog的是內部類的方法。您需要引用它所包含的外部「活動」類以使其起作用。所以你的情況我會做:

dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", 
new DialogInterface.OnClickListener() {     
    public void onClick(DialogInterface dialog, int which) { 

      ....    

    thisActivityClassName.showDialog(ID_DIALOG_SEND); 

thisActivityClassName.this.showDialog(ID_DIALOG_SEND);

否則,如果失敗,則可能需要創建一個Handler與外部類進行通信。

此外,我完全同意並重申dave.c的回覆。

3

是不是onCreateDialog應該返回您在case語句中創建Dialog,而不是返回null

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 

case ID_DIALOG_SEND: 

    ProgressDialog loadingDialog = new ProgressDialog(this); 
    loadingDialog.setMessage("Sending..."); 
    loadingDialog.setIndeterminate(true); 
    loadingDialog.setCancelable(false); 
    return loadingDialog; 
    ...