2016-12-23 64 views
0

我做了一个自定义DialogPreference,在我的设置中有一个seekbar对话框,并使用bindPreferenceSummaryToValue默认情况下使用设置活动将其摘要绑定到它的值。 (请参阅下面的内容)一切工作正常,但是当第一组设置中的设置没有设置为默认设置时,而是设置为0,因为0在bindPreferenceSummaryToValue中设置为后备值。未使用自定义DialogPreference和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); 

使用后备值d当值为空我猜,但为什么它会是空的,如果我把它设置为默认?

回答

0

解决了我的问题与此:

@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所做的。

相关问题