Android PreferenceManager无法加载自定义首选项的默认值

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

我使用了来自的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);
}

@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
中执行“脏编码”的情况下写入其默认值?

log
hasKey()
内部
TimePreference(Context-ctxt,AttributeSet-attrs)
构造函数来自构造函数:trueis
onSetInitialValue
是否调用过?如果是这样,请尝试逐步调试它。构造函数日志晚于onGetDefaultValue中的日志。可以吗?可以,可以,请参阅Preference.java源代码
a.getString(index):  08:00
hasKey(): false