Как проверить, отображается ли диалоговое окно или отображается несколько диалогов одного типа?
Я управляю диалогами по showDialog
/dismissDialog
/removeDialog
.
хочу:
отображение нескольких диалоговых окон в виде стека:
a) первый диалог отображается с помощью showDialog(DIALOG_TYPE)
b) следующие диалоги отображаются поверх существующего диалога
теперь я могу отображать только первый диалог, используя showDialog
и затем следующие диалоги игнорируются.
показать последний диалог:
a) первый диалог отображается с помощью showDialog(DIALOG_TYPE)
b) приложение проверяет, отображается ли диалоговое окно, закрывает диалоговое окно (если оно отображается) и открывает новое диалоговое окно.
есть ли возможность достичь одного из вышеперечисленных решений?
3 ответов
диалог есть isShowing() метод, который должен возвращать, если окно является видимым. Таким образом, вы можете использовать это, чтобы увидеть, отображается ли диалоговое окно и скрыть его с помощью dismissDialog(). Вам просто нужно сохранить ссылку на диалоги, которые вы создаете в onCreateDialog ().
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
}
});
Вы можете использовать флаг, чтобы проверить, открыт ли диалог или нет, и в соответствии со значением флага вы можете делать все что угодно. Как и я. У меня есть только один диалог, но когда я касаюсь другого 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;
}
попробуйте изменить этот код по-своему. Надеюсь, это поможет вам. Спасибо.