我正在尝试让一个已存在的Preference子类工作起来,它可以保存颜色值。我没有编写这个类,但是它应该在android-7及以上版本上运行正常(我正在编译到android-9目标)。完整的源代码在这里可用。这是首选项保存的地方:
@Override
public void onColorChanged(int color) {
if (isPersistent()) {
boolean ret = persistInt(color);
}
// (update preview box, other stuff)
}
使用调试输出,我可以看到
isPersistent()
返回true
,但persistInt()
返回false
。根据Android文档,persistInt()
返回首选项是否持久化;为什么会返回不同的值呢?(注意:从构造函数中显式调用了setPersistent(true)
。)无论如何,这个值都没有保存。在同一类的实例中,调用
getPersistedInt(defaultValue)
返回默认值。在下面的代码中,getPersistedInt()
总是被调用,并且始终返回mDefaultValue
。public int getValue() {
try {
if (isPersistent()) {
mValue = getPersistedInt(mDefaultValue);
}
} catch (ClassCastException e) {
mValue = mDefaultValue;
}
return mValue;
}
为什么会这样,我应该如何确保偏好设置被保存?