Вопрос

У меня есть следующая проблема, разработанная в Android 2.2 (API 8):

У меня есть индивидуальный класс диалога, как это:

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

И я создаю новый Authdialog, как это:

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

Я использую отладчика, и я вижу, что когда я отменяю (используя кнопку на спине или нажимаю вне диалогового окна), приложение отклоняет диалог вместо отмены.

У кого -нибудь была такая проблема с диалогами?

Заранее спасибо.

Это было полезно?

Решение

Предполагая, что этот диалог должен быть модальным, сделайте свой диалог новым занятием.

Другие советы

ondismiss () всегда увольняется, когда диалог закрывается. Документация для SetOnCancellistener () Государства: «Это будет вызвано только при отмене диалога, если создатель должен знать, когда он уволен в целом, используйте SetondismissListener», IE, это не онкансель или ондисмис, а оба, когда диалог отменяется. Я согласен, однако, что это имело бы больше смысла, если бы это не так.

SetCancelable (false) предотвратит что -либо делать что -либо. Многие разработчики просто отключают способность кнопки «Назад» закрыть диалоговое окно, поскольку неясно, является ли это отменой или нормальным действием для пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top