Frage

Ich habe das folgende Problem, in dem ich in Android 2.2 (API 8) entwickelt habe:

Ich habe eine angepasste Dialogklasse wie folgt:

public AuthDialog(final Context context, OnDismissListener dismissListener, OnCancelListener cancelListener) {
    super(context);
    setOnDismissListener(dismissListener);
    setOnCancelListener(cancelListener);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.userpassdialog);
    setTitle("Enter email and password");
    setCancelable(true);
    setCanceledOnTouchOutside(true);
    authEmail = (EditText) findViewById(R.id.authEmail);
    authPass = (EditText) findViewById(R.id.authPass);
    alertMessage = (TextView) findViewById(R.id.auth_alert);
    Button authButton = (Button) findViewById(R.id.authButton);
    View.OnClickListener onClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            if (checkCredentials())
                dismiss();
            else
                showAlert();
        }
    };
    authButton.setOnClickListener(onClickListener);
}

private void showAlert() {
    alertMessage.setText("Wrong user/pass");
    authEmail.setText(null);
    authPass.setText(null);
}

private boolean checkCredentials() {
    // Empty user/pass for now
    boolean checkEmail = authEmail.getText().toString().equals("");
    boolean checkPassword = authPass.getText().toString().equals("");
    return checkEmail && checkPassword;
}

@Override
public void onBackPressed() {
    cancel();
}

Und ich erstelle einen neuen AuthDialog wie diesen:

private void authenticateThenAccept() {
    OnDismissListener dismissListener = new OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            accept();
        }
    };
    OnCancelListener cancelListener = new OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            cancel();
        }
    };
    AuthDialog dialog = new AuthDialog(context, dismissListener, cancelListener);
    dialog.show();
}

Ich benutze den Debugger und sehe das, wenn ich abnehme (mit der Rückschaltfläche oder beim Drücken außerhalb des Dialogfelds), die App den Dialog entlastet, anstatt zu stornieren.

Hat jemand diese Art von Problem mit Dialogen gehabt?

Danke im Voraus.

War es hilfreich?

Lösung

Unter der Annahme, dass dieses Dialog modal sein sollte, machen Sie Ihren Dialog zu einer neuen Aktivität.

Andere Tipps

Ondismiss () wird immer abgefeuert, wenn der Dialog schließt. Die Dokumentation für setoncancellistener () erklärt: "Dies wird nur aufgerufen, wenn der Dialog storniert wird. Wenn der Schöpfer wissen muss, wann er im Allgemeinen abgewiesen wird, verwenden Sie SetDondishissListener", dh es ist weder Oncancel noch Ondismiss, sondern beides, wenn ein Dialog abgesagt wird. Ich bin jedoch damit einverstanden, dass es sinnvoller wäre, wenn dies nicht der Fall gewesen wäre.

SetCancelable (False) verhindert, dass die Rückbutton etwas tut. Viele Entwickler deaktivieren einfach die Fähigkeit der Rückschaltfläche, den Dialog zu schließen, da unklar ist, ob es sich um eine Abbrechen oder eine OK -Aktion für den Benutzer handelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top