私はshowDialog
/dismissDialog
/removeDialog
によってダイアログを管理しています。
したい:
スタックのようないくつかのダイアログを表示します。
a)最初のダイアログはshowDialog(DIALOG_TYPE)
を使用して表示されます
b)既存のダイアログの上部に次のダイアログが表示されます
これで、showDialog
を使用して最初のダイアログのみを表示でき、次のダイアログは無視されます。
最後のダイアログを表示:
a)最初のダイアログはshowDialog(DIALOG_TYPE)
を使用して表示されます
b)アプリケーションは、ダイアログが表示されているかどうかを確認し、ダイアログを閉じて(表示されている場合)、新しいダイアログを開きます。
上記の解決策のいずれかを達成する可能性はありますか?
ダイアログには isShowing() メソッドがあり、ダイアログが現在表示されている場合に返す必要があります。したがって、ダイアログを表示しているかどうかを確認し、dismissDialog()で非表示にできます。 onCreateDialog()で作成したダイアログへの参照を保持する必要があります。
フラグを使用して、ダイアログが開いているかどうかを確認できます。フラグの値に応じて、必要な操作を実行できます。私がしたように。ダイアログは1つしかありませんが、別の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;
}
あなたの方法でこのコードを変更してみてください。これがあなたを助けることを願っています。ありがとう。
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
}
});