bindPreferenceSummaryToValue
カスタム DialogPreference を作成して、設定にシークバー ダイアログを表示し、設定アクティビティでデフォルトで提供されるメソッドを使用して、その概要をその値にバインドしました。(以下を参照)すべて正常に動作していますが、最初の設定ではデフォルトではなく 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 になるのでしょうか?