我正在showDialog
/ dismissDialog
/ removeDialog
管理对话框。
我想:
以堆栈的形式显示几个对话框:
a)使用showDialog(DIALOG_TYPE)
b)下一个对话框显示在现有对话框的顶部
现在我只能使用showDialog
显示第一个对话框,然后忽略下一个对话框。
显示上一个对话框:
a)使用showDialog(DIALOG_TYPE)
b)应用程序检查是否显示对话框,关闭对话框(如果显示)并打开一个新对话框。
是否有可能实现上述解决方案之一?
答案 0 :(得分:59)
Dialog有一个isShowing()方法,如果对话框当前可见,则应该返回该方法。因此,您可以使用它来查看是否显示对话框并使用dismissDialog()隐藏它。您只需要保留对在onCreateDialog()中创建的对话框的引用。
答案 1 :(得分:4)
您可以使用flag来检查对话框是否打开,并根据标志值,您可以执行任何操作。像我一样。我只有一个对话框,但是当我触摸另一个EditText
时,如果我的对话框被打开,那么它应该先关闭,然后再重新打开动画。
代码段:
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;
}
尝试以您的方式更改此代码。希望这可以帮到你。感谢。
答案 2 :(得分:4)
Dialog
实施DialogInterface
,OnShowListener
。
因此您可以使用以下代码:
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
}
});