Android - 从EditTextPreference获取文本并验证它

时间:2014-02-20 11:40:36

标签: android edittextpreference

我正在实施用户输入和保存PIN码的偏好设置。我正在使用EditTextPreference,PIN码应该是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()不为空,它总是会返回真的?

谢谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

而是尝试

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

String实现CharSequence接口。

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

String pin = pinRetrievce.getText();
CharSequnce pinSequence = pin.subSequence(0, pin.length());
(TextUtils.isEmpty(pinSequence)