2016-12-23 94 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所做的。

相關問題