如何确保在保存时清除共享首选项

时间:2012-02-22 13:55:58

标签: android

在Android应用中,我让用户通过运行扩展PreferenceActivity的类来编辑他的首选项。 在res \ xml中我有一个文件--preferences.xml - 它有一个xml描述,用户可以配置哪些字段。像用户名和密码之类的东西。一个示例代码段:

<EditTextPreference android:name="User Name"
android:summary="Name in Your Name/Company format"
android:defaultValue="" android:title="Login name" android:key="userName" 
android:id="@+id/userName"/>

<EditTextPreference android:name="Password"
android:summary="Your web password" android:defaultValue=""
android:title="Login password" android:password="true" android:key="userPassword" 
android:id="@+id/userPassword"/>

事情按预期工作。从我的主应用程序代码中,我可以访问用户已配置的值。

我希望有一件事可以提供一些关于如何处理的好建议:删除首选项值中的前导和尾随空格。

由于用户错误或有用的键盘应用程序,有时用户在EditTextPreferences字段中输入一个额外的空白字符。作为第一个或最后一个字符。

我希望不迟于用户退出PreferenceActivity时删除这些明显的输入错误。 我希望得到一个清理用户偏好的好方法的建议。

2 个答案:

答案 0 :(得分:5)

在将用户保存到prefs之前,只需对用户提供的值使用String.trim()即可。 trim()方法从输入字符串的前端和末尾删除所有空格字符。

http://developer.android.com/reference/java/lang/String.html#trim()

答案 1 :(得分:0)

跟随Ollie C的评论,onDialogClosed的当前EditTextPreference代码如下所示:

my_str = '"I have apples, pears, and bannanas"'

这将使用原始值调用变更侦听器。建议不要在子类中执行以下操作,而不是修改setText:

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult) {
        String value = mEditText.getText().toString();
        if (callChangeListener(value)) {
            setText(value);
        }
    }
}