gpt4 book ai didi

android - 在 Android PreferenceScreen 中验证电话号码

转载 作者:行者123 更新时间:2023-11-29 16:10:36 24 4
gpt4 key购买 nike

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

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

现在我有以下 XML fragment

<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" />

以及由 Eclipse New Activity 向导提供的以下代码:

private void setupSimplePreferencesScreen() {
if (!isSimplePreferences(this)) {
return;
}

addPreferencesFromResource(R.xml.pref_general);
bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_phoneNo)));

}

addPreferenceFromResource 应该加载 XML 节点并将首选项添加到屏幕,而 binPreferenceSummaryToValue 应该在以下情况下更改描述文本偏好已更新。只是为了那些不喜欢 IDE 提供代码的人的完整性,第二种方法是由 Eclipse 提供的,它还在代码文件中提供了一个私有(private)类,即

     /**
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/

在一般情况下,当我在首选项编辑器上单击“确定”时,在保存首选项之前应该如何执行验证逻辑?将验证逻辑放在 PreferenceScreen 中的什么位置?

*我们不都是来学习的吗?

最佳答案

Android 为此内置了一个辅助方法。

String phoneNumber = ...;
boolean valid = PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber);

对于通用的、可重用的方法,这里是该方法在 PhoneNumberUtils 中的实现。 ,由 AOSP(Apache 许可)提供

 private static final Pattern GLOBAL_PHONE_NUMBER_PATTERN =
Pattern.compile("[\\+]?[0-9.-]+");
...
public static boolean isGlobalPhoneNumber(String phoneNumber) {
if (TextUtils.isEmpty(phoneNumber)) {
return false;
}

Matcher match = GLOBAL_PHONE_NUMBER_PATTERN.matcher(phoneNumber);
return match.matches();
}

验证应该发生在 Preference.OnPreferenceChangeListener 中的 onPreferenceChange 方法中。如果您不想保存该值,只需返回 false。

示例 fragment :

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 向导生成的设置 Activity 开始的,因此已经为您构建了此监听器。您只需要对其进行编辑以包括对电话号码的验证(假设这是正在编辑的内容),并在号码无效时返回 false,因此它不会保存到首选项中。

关于android - 在 Android PreferenceScreen 中验证电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com