偏好的偏好屏幕更新摘要

问题描述 投票:0回答:2

我通过扩展RingtonePrefernce实施了自定义首选项。我确实重写了getSummary方法,该方法在更新pref时动态返回pref的值。

但是问题是在主偏好设置屏幕上,关闭偏好设置后,更新的值未反映出来。如果我向下/向上滚动主偏好屏幕并且当偏好离开屏幕并重新显示在屏幕上时,偏好更新只能在主屏幕中更新。因此基本上是在重绘时。

我该如何解决?

列出所有偏好的主要性能屏幕代码

  public class MainActivity extends PreferenceActivity implements
            OnPreferenceClickListener, Preference.OnPreferenceChangeListener {

@SuppressLint("Deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SoundUtils.stopPlaying();

        ringtoneManager = new RingtoneManager(getApplicationContext());
        featureManager =  FeatureManager.getInstance(this);
        beepActionManager= new BeepActionManager();
        addPreferencesFromResource(R.xml.preferences_settings);
       //other code
  }
}

并且在preferences_settings中,我的偏好设置为

 <PreferenceCategory android:title="@string/sound_settings">
        <com.mindedges.beephourly.utils.CustomRintonePreference
            android:defaultValue="content://settings/system/notification_sound"
            android:key="ringtone_pref"
            android:ringtoneType="all"
            android:title="@string/hr_beep_tone_title"
            android:summary="@string/hr_beep_tone_summary"/>

        <com.mindedges.beephourly.utils.CustomRintonePreference


    </PreferenceCategory>
android preference
2个回答
0
投票

据我所知,在ListView关闭后调用PreferenceScreenListView.invalidate()时,需要使用onResume()函数使PreferenceScreen中的RingtonePreference无效。


0
投票

我检查了您的代码,创建了测试项目,找到了解决方案。我认为您应该通知您的自定义首选项已更改。“ RingtonePreference”具有名为“ onSaveRingtone”的回调方法,您需要在覆盖“ onSaveRingtone”时调用“ notifyChnaged”功能。这是我测试过的代码。

public class CustomPreference extends RingtonePreference {
    public CustomPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public CustomPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomPreference(Context context) {
        super(context);
    }

    @Override
    protected void onSaveRingtone(Uri ringtoneUri) {
        super.onSaveRingtone(ringtoneUri);

        notifyChanged();
    }

    @Override
    public CharSequence getSummary() {
        return "Date " + System.currentTimeMillis();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.