0

私のAndroidアプリでは、OnCreate関数に次のコードがあります:

txtUsername.setOnKeyListener(new OnKeyListener() {

        public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
            // TODO Auto-generated method stub

            String Username = txtUsername.getText().toString();

            if (arg1 == KeyEvent.KEYCODE_ENTER) {
                DontShowDialog = false;
                if ((Username.toLowerCase().endsWith("blabla.com") == false && Username.toLowerCase().endsWith("blabla-bla.nl") == false) || validateEmail(Username) == false) {
                    final Dialog dialog = new Dialog(arg0.getContext());
                    dialog.setContentView(R.layout.startdialog);
                    dialog.setTitle("Warning 1");

                    Button btOk = (Button) dialog.findViewById(R.id.btOk);
                    btOk.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                            DontShowDialog = true;
                            dialog.dismiss();

                            return;
                        }
                    });

                    if (DontShowDialog == false) {
                        dialog.show();
                    }
                    return false;
                }
            }

            txtUsername.clearFocus();
            txtPassword.setNextFocusDownId(txtPassword.getId());
            return false;
        }
    });

ユーザーが [次へ] ボタンを押したときにユーザー名が正しくない場合、ダイアログが表示されますが、[OK] ボタンでキャンセルできます。しかし....OKボタンを押した後、ダイアログが再び表示されます...私はそれを望んでいません。

なぜそれが起こっているのですか?

RG、エリック

4

2 に答える 2

2

イベントに戻ることfalseで、が消費されなかっonKey()たことをAndroidに伝えているKeyEventので、returnステートメントをに変更すると問題が解決する可能性があると思います。Androidはイベントが消費されたことを認識し、メソッドtrueに再入力しないためです。 onKey(). それを試して結果を共有できれば、素晴らしいことです!

于 2012-11-02T21:51:26.930 に答える
0

解決しました。

行を移動しました

DontShowDialog = true;

OnClick 部分から

onClick の下の if-then を次のように変更しました。

if (DontShowDialog == false) {
                        dialog.show();
                        DontShowDialog = true;
                        return false;
                    }
于 2012-11-03T20:03:02.717 に答える