Domanda

Sto avendo il seguente problema in via di sviluppo in Android 2.2 (API 8):

Ho una classe di dialogo personalizzato in questo modo:

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

E creo un nuovo AuthDialog in questo modo:

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

Sto utilizzando il debugger, e vedo che quando annullo (utilizzando il pulsante Indietro o premendo al di fuori della finestra di dialogo) l'applicazione chiude la finestra invece di annullare.

Chiunque ha avuto questo tipo di problema con finestre di dialogo?

Grazie in anticipo.

È stato utile?

Soluzione

Supponendo questa finestra di dialogo dovrebbe essere modale, rendere il vostro dialogo una nuova attività.

Altri suggerimenti

onDismiss () è sempre sparato si chiude quando di dialogo. La documentazione per setOnCancelListener () afferma: "Questo sarà invocato solo quando la finestra viene annullata, se le esigenze creatore di sapere quando è respinto in generale, l'uso setOnDismissListener" , cioè non è né onCancel o onDismiss ma entrambi quando una finestra di dialogo viene annullata. Sono d'accordo però che avrebbe avuto più senso aveva che non fosse stato il caso.

setCancelable (false) impedirà il pulsante indietro dal fare qualsiasi cosa. Molti sviluppatori è sufficiente spegnere la capacità del pulsante Indietro per chiudere la finestra di dialogo in quanto non è chiaro se questa è una annullare o un'azione ok per l'utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top