2011-02-10 3 views
2

У меня есть несколько диалоговых окон, внутри диалога, которые метательные исключение:Исключение создания диалога внутри диалога в андроида

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); в классе Anonymous Inner, это даст вам проблемы, так как он считает ShowDialog является метод внутреннего класса. Вам нужно ссылаться на внешний класс Activity, в котором он содержится для его работы. Так что в вашем случае я хотел бы сделать:

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 должен вернуть Dialog, что вы создаете в case заявления, а не возвращать 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; 
    ...