2011-02-10 82 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; 
    ...