在自定义 Preference 类上调用 setDefaultValue() 不会设置默认值。为什么?

Nic*_*ick 2 android preference preferenceactivity android-preferences listpreference

我正在扩展PreferenceActivity我的设置屏幕。在这个偏好活动中,我有几个偏好,其中一个是定制的。问题如下:

在此自定义首选项(从 扩展ListPreference)中,我希望能够设置默认值,因此我覆盖了该setDefaultValue()方法。在这种方法中,我进行了一些解析,因此它将采用正确的值。当我试图用getValue()函数读取这个值时,它只返回null.

所以我想,当我把一些硬编码的值放在那里时会发生什么(你知道,也许我做错了什么,这不是第一次)。嗯,我还是null回来了。

任何想法我做错了什么?

编辑:
在 xml 文件中设置 defaultValue 并不是一个真正的选项,因为在我检索它们之前这些值是未知的。

我做了一个解决方法:

  • 应用程序第一次启动时:获取数据
  • 在首选项中设置值。

这样我在收集数据时设置了默认首选项

eha*_*ell 5

我终于找到了解决方案(一次除了 StackOverflow 之外)。

当您创建自定义 Preference 类时,

  1. 你需要实现onSetInitialValueXåpplI'-I0llwlg'I -指出
  2. 需要实施onGetDefaultValue(TypedArray a, int index)

例如,如果自定义首选项保存为 int,

@Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
    setValue(restore ? getPersistedInt(FALLBACK_DEFAULT_VALUE) : (Integer) defaultValue);
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
   return a.getInteger(index, FALLBACK_DEFAULT_VALUE);
}
Run Code Online (Sandbox Code Playgroud)

现在PreferenceManager.setDefaultValues() 终于加载了android:defaultValue自定义首选项。仍然没有修复空值和假值,但有针对其他地方发布的解决方法。