Диалог создания исключений внутри диалога в Android - PullRequest
2 голосов
/ 10 февраля 2011

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

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;

Есть какие-нибудь подсказки?

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Разве 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;
    ...
1 голос
/ 10 февраля 2011

Поскольку вы пытаетесь использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...