我的偏好设置在更改时都会触发onSharedPreferenceChanged事件。它适用于所有偏好设置:复选框、列表、自定义等等。但是如果我从RingtonePreference中选择铃声,它不会被调用。我有以下代码:
<CheckBoxPreference android:title="@string/pref_notification"
android:defaultValue="true" android:summary="@string/pref_notification_summary"
android:key="prefNotification" />
<RingtonePreference android:title="@string/pref_ringtone"
android:key="prefRingtone"
android:summary="@string/pref_ringtone_summary" android:ringtoneType="all" />
<CheckBoxPreference android:title="@string/pref_vibrate"
android:defaultValue="true" android:summary="@string/pref_vibrate_summary"
android:key="prefVibrationOn" />
<ListPreference android:title="@string/pref_notification_interval"
android:summary="@string/pref_notification_interval_summary"
android:key="prefNotificationInterval" android:defaultValue="60"
android:entries="@array/prefs_interval" android:entryValues="@array/prefs_interval_values" />
我的类:
public class TimePrefsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
addPreferencesFromResource(R.layout.preferences);
Preference dbPref = (Preference) findPreference("prefDeleteDb");
dbPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference)
{
showWipeDbDialog();
return true;
}
});
}
@Override
public void onResume() {
super.onResume();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
toggleEnableList();
}
@Override
public void onPause() {
prefs.unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1)
{
boolean enabled = toggleEnableList();
if (enabled)
{
OnBootReceiver.setAlarm(TimePrefsActivity.this);
}
else
{
OnBootReceiver.cancelAlarm(TimePrefsActivity.this);
}
}
}
除了RingtonePreference之外,所有的偏好设置都可以在onSharedPreferenceChanged方法中被调用。有人有想法吗?谢谢。
onResume()
中已经设置了初始的summary
值(因为你可能想在第一次进入PreferenceActivity
时看到当前的设置),那么当你从弹出的对话框中选择新的铃声后,对话框关闭后PreferenceActivity
的onResume
将再次被调用,并且铃声偏好的摘要将被更新。因此,如果你已经在onResume
中设置了初始值,那么可能不需要使用这个解决方法。 - Tony Chan