我正在尝试使用现有的Preference子类来保存颜色值.我没有编写类,但它应该在
android-7及更高版本上工作(我正在编译为android-9目标.)完整的源代码是
available here.这是保存首选项的地方:
@Override public void onColorChanged(int color) { if (isPersistent()) { boolean ret = persistInt(color); } // (update preview Box,other stuff) }
使用调试输出我可以告诉isPersistent()返回true,但persistInt()返回false.根据Android documentation,persistInt()返回首选项是否持久;这些如何回归不同的价值? (注意:从构造函数中显式调用setPersistent(true).)
在任何情况下,都不会保存该值.对getPersistedInt(defaultValue)的调用将返回默认值,即使稍后在类的同一实例中也是如此.在下面的代码中,始终调用getPersistedInt()并始终返回mDefaultValue.
public int getValue() { try { if (isPersistent()) { mValue = getPersistedInt(mDefaultValue); } } catch (ClassCastException e) { mValue = mDefaultValue; } return mValue; }
为什么会这样,我怎样才能确保首选项保持不变?
解决方法
经过大量无望的搜索,我终于找到了问题:由于我的首选项XML文件中存在一个简单的拼写错误,因此首选值未分配密钥. (我使用android.key而不是android:key.)
由于Android在尝试保留没有键的首选项(但是默默地失败)时不会发出警告,因此在尝试保留值之前应调用shouldPersist()函数而不是isPersistent(),如果shouldPersist()返回false.例如:
@Override public void onColorChanged(int color) { mValue = color; if (shouldPersist()) { persistInt(color); } else { if (isPersistent()) Log.w("myapp","shouldPersist() returned false. Check if this preference has a key."); } // (update preview Box,other stuff) }
原文地址:https://www.jb51.cc/android/239739.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。