是否可以在更改时规范化Android偏好值?

时间:2013-10-15 00:09:18

标签: android android-4.0-ice-cream-sandwich preferenceactivity

在Android 4中,我有一个首选项值,我希望以标准格式E2C56DB5-DFFB-48D2-B060-D0F5A71096E0出现。但是用户可以不用破折号输入值。我想允许用户使用空格或破折号的任意组合输入它,只需让我的代码将其标准化即可。

我正在使用下面的代码,我看到了日志行,但它没有做任何事情。我猜这是因为Android有另一个编辑器对象打开,覆盖我的更改。有没有其他方法可以实现这个目标?

public class UuidFragment extends PreferenceFragment {
   ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
        this.getPreferenceScreen().findPreference("pref_uuid").setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference,
                Object newValue) {
                if (newValue.toString().length() != 0) {
                    String normalizedUuid=normalizeUuid(newValue.toString());
                    // TODO: this code runs but does nothing, I think because after committing the change, there is a higher level editor that commits the old value
                    // thereby undoing this change 
                    if (!normalizedUuid.equals(newValue.toString())) {
                        Log.d(TAG, "Adjusting uuid from "+newValue.toString()+" to "+normalizedUuid);
                        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(UuidFragment.this.getActivity());
                        SharedPreferences.Editor editor = settings.edit();
                        editor.putString(preference.getKey(), normalizedUuid);
                        editor.commit();
                    }
                    return true;
                }
            }
      });
}

}

1 个答案:

答案 0 :(得分:1)

尝试继承EditTextPreference并覆盖setText()。在setText()方法中,在链接到超类之前修复传入的字符串。然后,从您的首选项XML中引用您的EditTextPreference子类。