在Android首选项屏幕中验证电话号码

在Android首选项屏幕中验证电话号码,android,android-preferences,Android,Android Preferences,我有一个PreferenceScreen,如果系统无法自动检测到,用户可以在其中输入设备的电话号码。我仍在学习Android的这一部分,但通过Android SDK本身提供的示例和一些教程,我成功地理解了一些首选屏幕 我想要的是,用户只能在null或valid时保存电话号码,其中“valid”指的是运行通用验证逻辑(即返回true或false的匿名方法,可以在任何可能的情况下重复使用*)或更好,只是为了简化事情,^(\+39)?3[0-9]{9}$ 目前,我有以下XML片段 <EditTe

我有一个
PreferenceScreen
,如果系统无法自动检测到,用户可以在其中输入设备的电话号码。我仍在学习Android的这一部分,但通过Android SDK本身提供的示例和一些教程,我成功地理解了一些
首选屏幕

我想要的是,用户只能在null或valid时保存电话号码,其中“valid”指的是运行通用验证逻辑(即返回true或false的匿名方法,可以在任何可能的情况下重复使用*)或更好,只是为了简化事情,
^(\+39)?3[0-9]{9}$

目前,我有以下XML片段

<EditTextPreference
    android:inputType="phone"
    android:key="@string/preference_phoneNo"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:summary="@string/pref_phoneNumber_description"
    android:title="@string/pref_phoneNumber" />
addPreferenceFromResource
应该加载XML节点并将首选项添加到屏幕,而
binPreferenceSummaryToValue
应该在首选项更新时更改描述文本。对于那些不喜欢IDE提供的代码的人来说,为了完整起见,Eclipse提供了第二种方法,它还在代码文件中提供了一个私有类,即

     /**
 * A preference value change listener that updates the preference's summary
 * to reflect its new value.
 */
在一般情况下,当我在首选项编辑器上单击“确定”时,在保存首选项之前,应该如何执行验证逻辑?将要放入
首选项屏幕中的验证逻辑在哪里?

*我们不是都在这里学习吗?

Android有一个内置的助手方法

String phoneNumber = ...;
boolean valid = PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber);
对于一个通用的、可重用的方法,这里是该方法在中的实现,由AOSP(Apache许可)

验证应在onPreferenceChange方法中的Preference.OnPreferenceChangeListener中进行。如果不希望保存该值,只需返回false即可

示例代码段:

private static Preference.OnPreferenceChangeListener myListener =
    new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object value) {
            String stringValue = value.toString();
            if (preference instanceof PhoneNumberPreference) {
                return isGlobalPhoneNumber(value);
            }
        }
        ...

请注意,由于您是从Eclipse向导生成的设置活动开始的,因此已经为您构建了此侦听器。您只需编辑它以包含电话号码的验证(假设正在编辑),如果号码无效,则返回false,这样就不会将其保存到首选项中。

Android有一个内置的帮助器方法

String phoneNumber = ...;
boolean valid = PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber);
对于一个通用的、可重用的方法,这里是该方法在中的实现,由AOSP(Apache许可)

验证应在onPreferenceChange方法中的Preference.OnPreferenceChangeListener中进行。如果不希望保存该值,只需返回false即可

示例代码段:

private static Preference.OnPreferenceChangeListener myListener =
    new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object value) {
            String stringValue = value.toString();
            if (preference instanceof PhoneNumberPreference) {
                return isGlobalPhoneNumber(value);
            }
        }
        ...

请注意,由于您是从Eclipse向导生成的设置活动开始的,因此已经为您构建了此侦听器。您只需对其进行编辑,以包括电话号码的验证(假设正在编辑),如果号码无效,则返回false,这样就不会将其保存到首选项中。

我的问题是将该代码放在哪里,通常情况下,首选项验证代码已获取。更新了答案以包含此信息。还请更新问题,以澄清问题不仅仅是如何验证,而是将验证代码放在何处:)我的问题是将代码放在何处,一般来说,首选项验证代码明白了。更新了答案以包含此信息。还请更新问题,以澄清问题不仅在于如何验证,还在于将验证代码放在何处:)