自分のプリファレンスは、すべて変更時にonSharedPreferenceChangedイベントをトリガーします。チェックボックス、リスト、カスタムなど、すべての環境設定で機能しますが、RingtonePreferenceから着信音を選択すると呼び出されません。 RingtonePreferenceを除くすべての好み、RingtonePreferenceが発生しませんonSharedPreferenceChanged
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);
}
}
}
、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" />
そして、私のクラス:私はこのコードを持っています。誰にもアイデアはありますか?ありがとう。
おかげで、それは狂気私を運転していました。しかし、 'onResume()'の中に初期 'summary'値を設定している場合(' PreferenceActivity'を最初に入力したときに現在の設定を見たいと思っているので)、あなたが行くときダイアログが閉じた後、 'PreferenceActivity'の' onResume'が再び呼び出され、着信音設定の要約が更新されます。したがって、 'onResume'に初期値を設定している場合は、この回避策を使う必要はありません。 –