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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2535132/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 21:39:26  来源:igfitidea点击:

How do you validate the format and values of EditTextPreference entered in Android 2.1?

javaandroidvalidationpreferencesandroid-alertdialog

提问by Bryan C

Does anyone have sample code to validate user entered text in preferences? For example, I have a EditTextPreference for user to enter an email address. I'd like to validate the format of email address entered and pop up an alert dialog if the format isn't correct. Anyone have any sample code for this? Thanks

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

回答by Fede

Implement Preference.OnPreferenceChangeListener

实现 Preference.OnPreferenceChangeListener

boolean onPreferenceChange(Preference preference, Object newValue)

Called when a Preference has been changed by the user. This is called before the state of the Preference is about to be updated and before the state is persisted.

Returns True to update the state of the Preference with the new value.

boolean onPreferenceChange(Preferencepreference, Object newValue)

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

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

So you can directly return the result of value validation.

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

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

        });
    }
}

回答by Aaron

Your question was an early google hit when I was trying to do the same thing, so hopefully this helps someone. Here's something I hacked together today that demonstrates OnPreferenceChangeListener, thus allowing you to stop invalid changes.

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

in your fragment:

在你的片段中:

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

回答by Jeremy Haberman

I'd use Preference.OnPreferenceChangeListenerrather than SharedPreferences.OnSharedPreferenceChangeListener.

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

The former allows you to validate the new value before it's persisted (and prevent it from being persisted) rather than after.

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