1

android 2.2(API 8)で次の問題が発生しています。

私はこのようなカスタマイズされたDialogクラスを持っています:

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

デバッガーを使用していますが、キャンセルすると(戻るボタンを使用するか、ダイアログの外側を押す)、アプリがキャンセルする代わりにダイアログを閉じます。

Dialogsでこの種の問題が発生した人はいますか?

よろしくお願いします。

4

3 に答える 3

10

onDismiss()は、ダイアログが閉じたときに常に発生します。setOnCancelListener()のドキュメントには、「これはダイアログがキャンセルされたときにのみ呼び出されます。作成者が一般的にいつ閉じられるかを知る必要がある場合は、setOnDismissListenerを使用してください」、つまり、onCancelまたはonDismissのどちらでもないが、ダイアログがキャンセル。そうでなければ、もっと理にかなっているだろうと私は同意します。

于 2011-12-21T23:49:28.713 に答える
2

このダイアログがモーダルである必要があると仮定して、ダイアログを新しいアクティビティにします。

于 2011-11-28T22:37:51.837 に答える
0

setCancelable(false)は、戻るボタンが何もできないようにします。多くの開発者は、それがユーザーにとってキャンセルまたはOKアクションであるかどうかが不明であるため、ダイアログを閉じるための戻るボタンの機能をオフにするだけです。

于 2011-11-28T23:58:13.523 に答える