首选项的首选项屏幕更新摘要
Preference screen update summary for preference
我通过扩展 RingtonePrefernce 实现了自定义首选项。我确实覆盖了 getSummary 方法,该方法在更新 pref 时动态 returns pref 的值。
但问题是在主 pref 屏幕上,当 pref 关闭时更新的值没有反映出来。
如果我向下滚动主 pref 屏幕 down/up 并且当 pref 离开屏幕并返回屏幕时,唯一一次 pref summay 在主屏幕中更新。所以基本上当它重绘时。
我该如何解决?
列出所有首选项的主性能屏幕代码
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>
据我所知,PreferenceScreen
中的 ListView
需要在 PreferenceScreen
的 onResume()
中使用 ListView.invalidate()
函数使之无效在 RingtonePreference
关闭后被调用。
我检查了你的代码并创建了测试项目,找到了解决方案。
我认为你应该通知你的自定义偏好你改变了它。
'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();
}
}
我通过扩展 RingtonePrefernce 实现了自定义首选项。我确实覆盖了 getSummary 方法,该方法在更新 pref 时动态 returns pref 的值。
但问题是在主 pref 屏幕上,当 pref 关闭时更新的值没有反映出来。 如果我向下滚动主 pref 屏幕 down/up 并且当 pref 离开屏幕并返回屏幕时,唯一一次 pref summay 在主屏幕中更新。所以基本上当它重绘时。
我该如何解决?
列出所有首选项的主性能屏幕代码
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>
据我所知,PreferenceScreen
中的 ListView
需要在 PreferenceScreen
的 onResume()
中使用 ListView.invalidate()
函数使之无效在 RingtonePreference
关闭后被调用。
我检查了你的代码并创建了测试项目,找到了解决方案。 我认为你应该通知你的自定义偏好你改变了它。 '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();
}
}