Android PreferenceManager无法加载自定义首选项的默认值
我使用了来自的TimePreference的代码示例。 关于我的提问方法:Android PreferenceManager无法加载自定义首选项的默认值,android,android-preferences,android-sharedpreferences,Android,Android Preferences,Android Sharedpreferences,我使用了来自的TimePreference的代码示例。 关于我的提问方法: @Override protected Object onGetDefaultValue(TypedArray a, int index) { Log.v(TAG, "a.getString(index): " + a.getString(index)); Log.v(TAG, "hasKey(): " + hasKey() ); return a.getString(index); } @O
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
Log.v(TAG, "a.getString(index): " + a.getString(index));
Log.v(TAG, "hasKey(): " + hasKey() );
return a.getString(index);
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
String time=null;
if (restoreValue) {
if (defaultValue==null) {
time=getPersistedString(DEFAULT_NOTIF_TIME_STRING);
}
else {
time=getPersistedString(defaultValue.toString());
}
}
else {
time=defaultValue.toString();
}
lastHour=getHour(time);
lastMinute=getMinute(time);
}
在通知_time_fragment.xml中:
<mypackage.preferences.TimePreference
android:key ="@string/notif_time_key"
android:title="@string/notif_time_title"
android:defaultValue="08:00"
android:persistent="true"
/>
通知时间等于“无法读取时间”。
从onGetDefaultValue进行日志记录:
a.getString(index): 08:00
hasKey(): false
我猜这是hasKey()
中的false
是首选项未通过命令PreferenceManager.setDefaultValues()
保存在SharedReference
中的原因
我必须说,EditTextPreference、CheckBoxPreference
的android:defaultValue
是使用相同的命令从xml资源中正确检索的
为什么hasKey()
是false
?
时间偏好有什么问题?在调用
super
hasKey()之后,如何使其在不启动PreferenceActivity
和不在MainActivity
中执行“脏编码”的情况下写入其默认值?loghasKey()
内部TimePreference(Context-ctxt,AttributeSet-attrs)
构造函数来自构造函数:trueisonSetInitialValue
是否调用过?如果是这样,请尝试逐步调试它。构造函数日志晚于onGetDefaultValue中的日志。可以吗?可以,可以,请参阅Preference.java源代码
a.getString(index): 08:00
hasKey(): false