0

我正在实现用户输入并保存 PIN 码的首选项。我为此使用了一个EditTextPreferencePIN 码应该正好是 4 位数字。为了验证它,我使用了以下OnPreferenceChangeListener()方法

final EditTextPreference pinRetrieve = (EditTextPreference)getPreferenceScreen().findPreference("create_pin");

pinRetrieve.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object o) {
                Boolean rtnval = true;
                if (TextUtils.isEmpty(pinRetrieve.getText())){
                    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(R.string.pin_error_heading);
                    builder.setMessage(R.string.pin_alert_pin_not_set);
                    builder.setPositiveButton(android.R.string.ok, null);
                    builder.show();
                    pinSetting.setChecked(false);
                    rtnval = false;

                } else if (pinRetrieve.getText().length() < 4){
                    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(R.string.pin_error_heading);
                    builder.setMessage(R.string.pin_alert_pin_less_digits);
                    builder.setPositiveButton(android.R.string.ok, null);
                    builder.show();
                    pinSetting.setChecked(false);
                    rtnval = false;
                }
                return rtnval;
            }
        });

即使我输入 4 位数字,我也会收到带有R.string.pin_alert_pin_not_set消息的警报框,我认为发生的事情是它总是转到if (TextUtils.isEmpty(pinRetrieve.getText())),即使它不是空的。

我不能用TextUtils.isEmpty(pinRetrieve.getText())EditBoxPreference?如果可以,为什么即使pinRetrieve.getText()不为空,它也总是返回true?

谢谢

4

2 回答 2

1

传递给的第二个参数onPreferenceChange(Preference preference, Object o)是首选项的新值,您可以检查它而不是使用EditTextPreference引用。您还可以删除final关键字。并摆脱警告。您所需要的只是将o值转换为字符串。如果您的首选项是从 xml 文件添加的,您可以添加一个android:maxLength="4"属性 - 这将不允许用户在 EditText 中输入超过 4 个字符。

于 2014-02-20T13:35:28.867 回答
0

TextUtils 类的 isEmpty 函数接受一个字符序列作为参数,而 EditTextPreferences 的 getText 返回一个字符串。

不如试试

(TextUtils.isEmpty(new CharSequence(pinRetrieve.getText())))

String 实现了 CharSequence 接口。

您可以尝试使用字符串类的子序列函数,它会返回一个字符序列。

String pin = pinRetrievce.getText();
CharSequnce pinSequence = pin.subSequence(0, pin.length());
(TextUtils.isEmpty(pinSequence)
于 2014-02-20T11:48:30.560 回答