Moje preferencje wszystkie powodują zdarzenie onSharedPreferenceChanged po zmianie. Działa dla wszystkich preferencji: Pole wyboru, Lista, niestandardowe itp. Ale nie zostanie wywołane, jeśli wybiorę dzwonek z opcji DzwonekPreferencyjny. Mam ten kod:RingtonePreference nie wyzwala 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" />
i moja klasa:
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);
}
}
}
wszystkie preferencje, z wyjątkiem RingtonePreference, dotrzeć metodę onSharedPreferenceChanged. Czy ktoś ma pomysł? Dzięki.
Dzięki za wskazanie tego błędu, to było doprowadza mnie do szału. Zauważyłem jednak, że jeśli w swoim 'onResume()' już ustawiasz początkowe wartości 'summary' (ponieważ prawdopodobnie będziesz chciał zobaczyć bieżące ustawienia po pierwszym wprowadzeniu' PreferenceActivity'), to kiedy pójdziesz aby wybrać nowy dzwonek z wyskakującego okna dialogowego, po zamknięciu okna dialogowego 'onResume' 'PreferenceActivity' zostanie ponownie wywołany, a podsumowanie preferencji Dzwonek zostanie zaktualizowane. Tak więc może nie być konieczne użycie tego obejścia, jeśli już ustawiłeś wartości początkowe w 'onResume' –