web-dev-qa-db-fra.com

Comment vérifier si la boîte de dialogue est affichée ou afficher plusieurs boîtes de dialogue du même type?

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?

27
pixel

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 ().

60
Robby Pond

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.

4
user744881

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    
    }
});
4
Bartek Lipinski