【问题标题】:Default value not setting with custom DialogPreference and bindPreferenceSummaryToValue未使用自定义 DialogPreference 和 bindPreferenceSummaryToValue 设置默认值
【发布时间】:2016-12-23 18:08:31
【问题描述】:

我创建了一个自定义 DialogPreference 以在我的设置中有一个搜索栏对话框,使用默认设置活动提供的 bindPreferenceSummaryToValue 方法将其摘要绑定到其值。 (见下文)一切正常,但是当第一个设置中的设置时,它没有设置为默认值,而是设置为 0,因为在 bindPreferenceSummaryToValue 中将 0 设置为备用值。

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);

我猜当 value 为 null 时使用备用值,但如果我将其设置为默认值,为什么它会为 null?

【问题讨论】:

    标签: android sharedpreferences dialog-preference


    【解决方案1】:

    解决了我的问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 2010-10-28
      • 2019-07-13
      相关资源
      最近更新 更多