2

Pin 認証用のカスタム ダイアログ ボックスを使用したいと考えています。これが私のコードです:

public void fetchUI()
{
    add=(Button)findViewById(R.id.pinButton);

    add.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

            final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
            final EditText input = new EditText(MainActivity.this);
            input.setTransformationMethod(PasswordTransformationMethod.getInstance());
            alert.setView(input);
            alert.setTitle("Type Your PIN");
            alert.setIcon(R.drawable.ic_launcher);
            alert.setMessage("Please Type Your PIN  below to Authenticate");

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                }
            });

            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    dialog.cancel();
                }
            });

           alert.show();
        }
    });
}

ここで、これを行いたいと思います。正しい PIN で [OK] をクリックすると、ダイアログ ボックスが消えます。そうしないと、[OK] をクリックしても消えません。どうすればこれを達成できますか?どんな助けでも大歓迎です。

4

6 に答える 6

5
    final String CORRECT_PIN = "123123"; // Should come from somewhere else than a local variable
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            if (CORRECT_PIN.equals(input.getText().toString()) {
                dialog.dismiss();
            } else {
                input.setError(getString(R.string.error_incorrect_pin));
            }    
        }
    });

編集:上記のコードは、検証を処理する適切な方法を提供します。ただし、ボタンがクリックされた後にダイアログが閉じられないようにするには、カスタム ダイアログ ボタンに独自のボタンを含める必要があります。

その他の可能性: ピンが正しい場合にのみ OK ボタンを有効にします。EditText にテキスト変更リスナーを追加し、onTextChange メソッドで次の操作を行う必要があります。

input.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {               
        alert.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(CORRECT_PIN.equals(input.getText().toString());
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});
于 2012-11-15T08:06:37.237 に答える
2

PositiveButton または NegativeButton をクリックすると、AlertDialog は常に閉じます。

やりたいことは、独自の「OK」ボタンと「キャンセル」ボタンを AlertDialog のビューに追加し、それらのボタンにリスナーを配置することです。だから、ただ電話する代わりに...

alert.setView(input);

...ボタンも追加したい。このようなもの:

LinearLayout ll = new LinearLayout(context);
ll.addView(input);
ll.addView(okButtonYouInstansiatedYourself);
ll.addView(cancelButtonYouInstansiatedYourself);
alert.setView(ll);

okButtonYouInstansiatedYourself.b.setOnClickListener(...);
cancelButtonYouInstansiatedYourself.b.setOnClickListener(...);
于 2012-11-15T08:14:44.357 に答える
2

関連するさまざまな問題により、ダイアログ ボックスと同じように動作するアプローチを変更しました

このことに対する私の解決策は

2つのアクティビティを使用

  • 1 人の親
  • 2 子供

親から子を呼び出し、要件に従って作業を行いますが、menifest ファイルでこれらを子アクティビティに追加すると、アクティビティはダイアログ ボックスのように動作します

android:theme="@android:style/Theme.Dialog"

于 2012-11-15T14:08:50.877 に答える
1

onShowListener を AlertDialog に追加すると、ボタンの onClickListener をオーバーライドできます。

final AlertDialog d = new AlertDialog.Builder(context)
        .setView(v)
        .setTitle(R.string.my_title)
        .setPositiveButton(android.R.string.ok,
                new Dialog.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface d, int which) {
                        //Do nothing here. We override the onclick
                    }
                })
        .setNegativeButton(android.R.string.cancel, null)
        .create();

d.setOnShowListener(new DialogInterface.OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {

        Button b = d.getButton(AlertDialog.BUTTON_POSITIVE);
        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Do something

                //Dismiss once everything is OK.
                d.dismiss();
            }
        });
    }
});

ソース:ボタンがクリックされたときにダイアログが閉じないようにする方法

于 2012-11-15T08:10:48.103 に答える
0
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            String val = input.getText().toString();  /// this is your input editbox value

            }
        });
于 2012-11-15T08:07:03.383 に答える