33 Stimmen

Wie kann man prüfen, ob ein Dialog angezeigt wird oder mehrere Dialoge desselben Typs anzeigen?

Ich verwalte die Dialoge durch showDialog / dismissDialog / removeDialog .

Ich möchte es:

Anzeige mehrerer Dialoge in einer Art Stapel:

a) Der erste Dialog wird angezeigt mit showDialog(DIALOG_TYPE)

b) Nächste Dialoge werden über dem bestehenden Dialog angezeigt

Jetzt kann ich den ersten Dialog nur noch mit showDialog und dann werden die nächsten Dialoge ignoriert.

Letzten Dialog anzeigen:

a) Der erste Dialog wird angezeigt mit showDialog(DIALOG_TYPE)

b) Die Anwendung prüft, ob der Dialog angezeigt wird, schließt den Dialog (falls er angezeigt wird) und öffnet einen neuen Dialog.

Gibt es eine Möglichkeit, eine der oben genannten Lösungen zu erreichen?

72voto

Robby Pond Punkte 71994

Der Dialog hat eine isShowing() Methode, die zurückgeben soll, ob der Dialog gerade sichtbar ist. Sie können diese Methode also verwenden, um zu sehen, ob ein Dialog angezeigt wird, und ihn mit dismissDialog() ausblenden. Sie müssen nur einen Verweis auf die Dialoge behalten, die Sie in onCreateDialog() erstellen.

4voto

Sie können ein Flag verwenden, um zu prüfen, ob das Dialogfeld geöffnet ist oder nicht, und je nach Flag-Wert können Sie tun, was Sie wollen. Wie ich es getan habe. Ich habe nur einen Dialog, aber wenn ich einen anderen berühre EditText und wenn mein Dialog geöffnet ist, sollte er sich zuerst schließen und dann mit einer Animation wieder öffnen.

Code-Schnipsel:

    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;
    }

Versuchen Sie, diesen Code auf Ihre Weise zu ändern. Ich hoffe, dies kann Ihnen helfen. Danke!

4voto

Bartek Lipinski Punkte 29098

Dialog implementiert DialogInterface die über OnShowListener .

Daher können Sie einen Code wie diesen verwenden:

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    
    }
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X