12

有没有人有示例代码来验证用户在首选项中输入的文本?例如,我有一个 EditTextPreference 供用户输入电子邮件地址。我想验证输入的电子邮件地址的格式,如果格式不正确,我会弹出一个警告对话框。有人有任何示例代码吗?谢谢

4

3 回答 3

9

当我试图做同样的事情时,你的问题是谷歌早期的热门话题,所以希望这对某人有所帮助。这是我今天一起破解的东西,它演示了 OnPreferenceChangeListener,从而允许您停止无效更改。

在你的片段中:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        Your_Pref = (EditTextPreference) getPreferenceScreen().findPreference("Your_Pref");

        Your_Pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                Boolean rtnval = true;
                if (Your_Test) {
                    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("Invalid Input");
                    builder.setMessage("Something's gone wrong...");
                    builder.setPositiveButton(android.R.string.ok, null);
                    builder.show();
                    rtnval = false;
                }
                return rtnval;
            }
        });
    }
于 2012-07-17T22:40:05.853 回答
9

实现 Preference.OnPreferenceChangeListener

boolean onPreferenceChange(偏好偏好,对象 newValue)

当用户更改首选项时调用。这在 Preference 的状态即将更新和状态保持之前被调用。

返回 True 以使用新值更新 Preference 的状态。

所以可以直接返回值校验的结果。

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
        findPreference("mail_preference_key").setOnPreferenceChangeListener(
            new Preference.OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                return Pattern.matches("mailPattern", (String) newValue);
            }

        });
    }
}
于 2010-04-16T14:44:50.603 回答
2

我会使用Preference.OnPreferenceChangeListener而不是 SharedPreferences.OnSharedPreferenceChangeListener.

前者允许您在新值被持久化之前验证它(并防止它被持久化)而不是之后。

于 2012-04-03T14:39:02.610 回答