我正在使用showDialog
/dismissDialog
/removeDialog
.管理对话框
我想:
以堆栈的形式显示几个对话框:
a)使用showDialog(DIALOG_TYPE)
显示第一个对话框
b)下一个对话框显示在现有对话框上方
现在我只能使用showDialog
显示第一个对话框,然后忽略下一个对话框。
显示最后一个对话框:
a)使用showDialog(DIALOG_TYPE)
显示第一个对话框
b)应用程序检查对话框是否显示,关闭对话框(如果显示)并打开一个新的对话框。
是否有可能实现上述解决方案之一?
发布于 2010-07-01 03:12:18
Dialog有一个isShowing()方法,如果对话框当前可见,则应返回该方法。因此,您可以使用它来查看对话框是否正在显示,并使用dismissDialog()将其隐藏。您只需保留对在onCreateDialog()中创建的对话框的引用。
发布于 2011-07-16 20:31:47
你可以使用flag来检查对话框是否打开,并根据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;
}
试着用你的方式修改这段代码。希望这能对你有所帮助。谢谢。
发布于 2015-01-09 20:03:23
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
}
});
https://stackoverflow.com/questions/3152507
复制相似问题