如何检查对话框是否显示或显示多个相同types的对话框?

我正在通过showDialog / dismissDialog / removeDialog管理对话框

我要:

以堆栈的forms显示几个对话框:

a)使用showDialog(DIALOG_TYPE)显示第一个对话框

b)下一个对话框显示在现有对话框的顶部

现在我只能使用showDialog显示第一个对话框,然后忽略下一个对话框。

显示上一个对话框

a)使用showDialog(DIALOG_TYPE)显示第一个对话框

b)应用程序检查是否显示对话框,关闭对话框(如果显示)并打开新对话框。

有没有可能实现上述解决方案之一?

Dialog有一个isShowing()方法,如果对话框当前可见,则该方法应该返回。 因此,您可以使用它来查看是否显示对话框并使用dismissDialog()隐藏它。 您只需要保留对在onCreateDialog()中创建的对话框的引用。

Dialog实现了具有OnShowListener DialogInterface

因此,您可以使用以下代码:

 Dialog dialog = new Dialog(context); // ... set all things considering your dialog dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { // do something when your dialog is shown } }); 

您可以使用flag来检查对话框是否打开,并根据标志值,您可以执行任何操作。 像我一样。 我只有一个对话框,但当我触摸另一个EditText ,如果我的对话框打开,那么它应该先关闭然后再重新打开animation。

代码段:

  private EditText mEditText, mEditCode; private Dialog mDialog; private int mClicked = 0; private boolean isShown = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mEditText = (EditText)findViewById(R.id.EnterValue); mEditText.setClickable(true); mEditText.setOnClickListener(this); mEditCode = (EditText)findViewById(R.id.EnterCode); mEditCode.setClickable(true); mEditCode.setOnClickListener(this); } public void onClick(View nView) { switch (nView.getId()) { case R.id.EnterValue: mClicked = R.id.EnterValue; mEditText.requestFocus(); mEditText.setFocusableInTouchMode(false); mEditText.setEnabled(true); mEditText.setSelection(mEditText.getText().toString().trim().length()); if(isShown) { mDialog.dismiss(); showInfoDialog(); } else { showInfoDialog(); } break; case R.id.EnterCode: mClicked = R.id.EnterCode; mEditCode.requestFocus(); mEditCode.setFocusableInTouchMode(false); mEditCode.setEnabled(true); mEditCode.setSelection(mEditCode.getText().toString().trim().length()); if(isShown) { mDialog.dismiss(); showInfoDialog(); } else { showInfoDialog(); } break; } } private boolean showInfoDialog() { mDialog = new Dialog(CustomKeyboardNotLikeAndroidActivity.this, R.style.PauseDialog); mDialog.setContentView(R.layout.keyboard); mDialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; mDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); mDialog.setCancelable(true); isShown = true; mDialog.show(); return false; } 

尝试以您的方式更改此代码。 希望这可以帮到你。 谢谢。