Le mie preferenze attivano l'evento onSharedPreferenceChanged dopo una modifica. Funziona con tutte le preferenze: casella di controllo, elenco, personalizzato, ecc. Ma non verrà chiamato se seleziono una suoneria da RingtonePreference. Ho questo codice:RingtonePreference non attivato onSharedPreferenceChanged
<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" />
E la mia classe:
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);
}
}
}
tutte le preferenze, ad eccezione del RingtonePreference, raggiunge il metodo onSharedPreferenceChanged. Qualcuno ha un'idea? Grazie.
Grazie per aver ricordato questo bug, che mi stava facendo impazzire. Ho notato, tuttavia, che se nel tuo 'onResume()' stai già impostando i valori di 'summary' iniziali (dal momento che probabilmente vorrai vedere le impostazioni correnti al primo accesso a' PreferenceActivity'), poi quando andrai per scegliere una nuova suoneria dalla finestra di dialogo che si apre, dopo che la finestra di dialogo si chiude il 'PreferenceActivity''s 'onResume' verrà richiamato comunque e il riepilogo della preferenza della suoneria verrà aggiornato. Quindi potrebbe non essere necessario usare questa soluzione alternativa se stavi già impostando i valori iniziali in 'onResume' –