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 单击“确定”,则会出现一个对话框。否则,如果我单击确定,它不会消失。我怎样才能做到这一点?任何帮助将不胜感激。

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 总是会关闭。

您要做的是将您自己的“确定”和“取消”按钮添加到 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个孩子

从父母那里调用孩子并根据您的要求完成工作,但在清单文件中将这些东西添加到您的孩子活动中,您的活动将像对话框一样

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 回答
0

您可以使用 SharedPreference 来保存用户名和密码。您还可以通过 SharedPreference 检查您的密码和用户名。

于 2014-05-24T04:50:31.477 回答