Je gère les dialogues par showDialog
/dismissDialog
/removeDialog
.
Je veux:
Afficher plusieurs boîtes de dialogue sous forme de pile:
a) La première boîte de dialogue est affichée à l'aide de showDialog(DIALOG_TYPE)
b) Les boîtes de dialogue suivantes sont affichées en haut de la boîte de dialogue existante
Maintenant, je ne peux afficher que la première boîte de dialogue en utilisant showDialog
, puis les boîtes de dialogue suivantes sont ignorées.
Afficher la dernière boîte de dialogue:
a) La première boîte de dialogue est affichée à l'aide de showDialog(DIALOG_TYPE)
b) L'application vérifie si la boîte de dialogue s'affiche, ferme la boîte de dialogue (si elle s'affiche) et ouvre une nouvelle boîte de dialogue.
Y a-t-il une possibilité de réaliser l'une des solutions ci-dessus?
La boîte de dialogue a une méthode isShowing () qui devrait retourner si la boîte de dialogue est actuellement visible. Ainsi, vous pouvez utiliser cela pour voir si une boîte de dialogue s'affiche et la masquer à l'aide de disableDialog (). Il vous suffit de conserver une référence aux boîtes de dialogue que vous créez dans onCreateDialog ().
Vous pouvez utiliser l'indicateur pour vérifier si la boîte de dialogue est ouverte ou non et selon la valeur de l'indicateur, vous pouvez faire ce que vous voulez. Comme j'ai fait. Je n'ai qu'une seule boîte de dialogue, mais lorsque j'en touche une autre EditText
et si ma boîte de dialogue est ouverte, elle doit d'abord se fermer puis se rouvrir avec une animation.
Extrait de code:
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;
}
Essayez de modifier ce code à votre façon. J'espère que cela peut vous aider. Merci.
Dialog
implémente DialogInterface
qui a OnShowListener
.
Par conséquent, vous pouvez utiliser du code comme celui-ci:
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
}
});