未使用自定义 DialogPreference 和 bindPreferenceSummaryToValue 设置默认值
Default value not setting with custom DialogPreference and bindPreferenceSummaryToValue
我制作了一个自定义 DialogPreference,在我的设置中有一个搜索栏对话框,使用默认提供的设置 Activity 的 bindPreferenceSummaryToValue
方法将其摘要绑定到它的值。 (见下文)一切正常,但是当第一次设置时,它不是设置为默认值,而是设置为 0,因为 0 被设置为 bindPreferenceSummaryToValue 中的后备值。
private static void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(bindPreferenceSummaryToValueListener);
if (preference instanceof SeekBarPreference) {
bindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager.getDefaultSharedPreferences(preference.getContext()).
getInt(preference.getKey(), 0)); // Fallback value
} else {
...
在我的自定义 DialogPreference 中,我有以下方法:
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
progress= restorePersistedValue ? getPersistedInt(progress) : (int) defaultValue;
}
当然 prefs.xml 我有:
<SeekBarPreference
android:defaultValue="10"
android:key="my_key"
... />
在 MainActivity:
PreferenceManager.setDefaultValues(this, R.xml.prefs, false);
我猜当值为 null 时使用回退值,但如果我将它设置为默认值,为什么它会是 null?
解决了我的问题:
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
progress = restorePersistedValue ? getPersistedInt(progress) : (int) defaultValue;
persistInt(progress); // ADD THIS HERE
}
原因是当从xml首选项文件设置值时,它需要由首选项本身保存到SharedPreferences。这就是 persistInt
所做的。
我制作了一个自定义 DialogPreference,在我的设置中有一个搜索栏对话框,使用默认提供的设置 Activity 的 bindPreferenceSummaryToValue
方法将其摘要绑定到它的值。 (见下文)一切正常,但是当第一次设置时,它不是设置为默认值,而是设置为 0,因为 0 被设置为 bindPreferenceSummaryToValue 中的后备值。
private static void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(bindPreferenceSummaryToValueListener);
if (preference instanceof SeekBarPreference) {
bindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager.getDefaultSharedPreferences(preference.getContext()).
getInt(preference.getKey(), 0)); // Fallback value
} else {
...
在我的自定义 DialogPreference 中,我有以下方法:
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
progress= restorePersistedValue ? getPersistedInt(progress) : (int) defaultValue;
}
当然 prefs.xml 我有:
<SeekBarPreference
android:defaultValue="10"
android:key="my_key"
... />
在 MainActivity:
PreferenceManager.setDefaultValues(this, R.xml.prefs, false);
我猜当值为 null 时使用回退值,但如果我将它设置为默认值,为什么它会是 null?
解决了我的问题:
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
progress = restorePersistedValue ? getPersistedInt(progress) : (int) defaultValue;
persistInt(progress); // ADD THIS HERE
}
原因是当从xml首选项文件设置值时,它需要由首选项本身保存到SharedPreferences。这就是 persistInt
所做的。