如何验证在Android 2.1中输入的EditTextPreference的格式和值?

Bry*_*n C 12 java validation android preferences android-alertdialog

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

Fed*_*ede 9

实现Preference.OnPreferenceChangeListener

boolean onPreferenceChange(首选项首选项,对象newValue)

当用户更改了首选项时调用.这将在Preference的状态即将更新之前和状态持久之前调用.

返回True以使用新值更新"首选项"的状态.

所以你可以直接返回值验证的结果.

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);
            }

        });
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 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;
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)