另一个警报对话框后的警报对话 第一个缺失! 安卓

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

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

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

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

ImportActivity这是最后的对话

我在活动中:

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; } 

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

  // 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; }