【问题标题】:alert dialog after another alert dialog ? The first is missing! android另一个警报对话框之后的警报对话框?第一个不见了!安卓
【发布时间】:2012-09-19 19:13:16
【问题描述】:

我有一个活动(ImportActivity),用户在其中输入一些度量值并将它们保存到 sqlite 数据库中。

当用户在导入数据库后单击保存按钮时,我有一个警告对话框(SAVEORBACK_DIALOG_ID),用户可以在其中离开此活动或导入另一个度量。它工作得很好。

我的问题是当我尝试在(SAVEORBACK_DIALOG_ID)警报对话框之前显示另一个警报对话框(SMS_DIALOG_ID)时。这是因为我想询问用户是否发送短信。

当我运行它时,它只显示第二个警报对话框(SAVEORBACK_DIALOG_ID)!!

我在活动中:

    static final int DATE_DIALOG_ID = 0;
static final int TIME_DIALOG_ID = 1;
static final int SAVEORBACK_DIALOG_ID = 2;
static final int SMS_DIALOG_ID = 3;

我从我的活动中给他们打电话:

        // sms dialog(send sms to doctor?yes/no)
        showDialog(SMS_DIALOG_ID);

        // save or back dialog
        showDialog(SAVEORBACK_DIALOG_ID);

这是我的对话框的 onCreateDialog 方法(我删除了一些更容易阅读):

    @Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
                mDay);
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute,
                false);
    case SAVEORBACK_DIALOG_ID:
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(
                "Information saved successfully ! Add Another Info?")
                .setCancelable(false)
                .setPositiveButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                ImportActivity.this.finish();

                            }
                        })
                .setNegativeButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                                // get the new date
                                // Clearing the fields & update date/time
                                // textviews
                            }
                        });
        AlertDialog dialog = builder.create();
        return dialog;

        // case sms dialog
    case SMS_DIALOG_ID:
        AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
        builder2.setMessage("High blood pressure ! Send sms to doctor?")
                .setCancelable(false)
                .setPositiveButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                                // do nothing - just continue
                            }
                        })
                .setNegativeButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                                // try to send sms - report status
                            }
                        });
        AlertDialog dialog2 = builder2.create();
        return dialog2;
        //

    }
    return null;
}

【问题讨论】:

    标签: java android dialog progressdialog android-alertdialog


    【解决方案1】:

    这些命令是连续执行的,正如您所注意到的,它会覆盖第一个对话框:

        // sms dialog(send sms to doctor?yes/no)
        showDialog(SMS_DIALOG_ID);
    
        // save or back dialog
        showDialog(SAVEORBACK_DIALOG_ID);
    

    因为showDialog() 在显示第二个对话框之前不会等待第一个对话框的响应。

    只需将您的第二个 showDialog() 命令移动到第一个对话框中的按钮:

    .setPositiveButton("No",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
                // do nothing - just continue
                ImportActivity.this.showDialog(SAVEORBACK_DIALOG_ID);
            }
        })
    // etc, etc
    

    您也可以使用 OnDismissDialogListener,这称为每当对话框关闭(通过按钮单击、取消操作等):

    case SMS_DIALOG_ID:
        ...
        AlertDialog dialog2 = builder2.create();
    
        dialog2.setOnDismissListener(new OnDismissListener() {
            public void onDismiss(DialogInterface dialog) {
                ImportActivity.this.showDialog(SAVEORBACK_DIALOG_ID);
            }
        });
    
        return dialog2;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多