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