<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 {@OverrIDeprotected 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; } });}@OverrIDepublic voID onResume() { super.onResume(); prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.registerOnSharedPreferencechangelistener(this); toggleEnableList();}@OverrIDepublic voID onPause() { prefs.unregisterOnSharedPreferencechangelistener(this); super.onPause();}@OverrIDepublic voID onSharedPreferenceChanged(SharedPreferences arg0,String arg1){ boolean enabled = toggleEnableList(); if (enabled) { OnBootReceiver.setAlarm(TimePrefsActivity.this); } else { OnBootReceiver.cancelAlarm(TimePrefsActivity.this); }}}
除了铃声首选项之外,所有的首选项都可以在SharedPreferenceChanged上达到方法.有没有人有想法?谢谢.
解决方法 我也遇到了同样的问题,似乎是androID系统中的一个BUG.调试代码后,我发现侦听器没有添加到我们的铃声优先级侦听器映射中,与其他类(例如ListPreference)不同.
我opened a ticket,但是现在我发现了一种使用OnPreferencechangelistener克服它的方法.
我的代码将偏好摘要设置为所选铃声,可以使用您的逻辑.
首先使您的活动实现OnPreferencechangelistener并写入onPreferenceChange方法
@OverrIDepublic boolean onPreferenceChange(Preference preference,Object newValue) { updateringtoneSummary((ringtonePreference) preference,Uri.parse((String) newValue)); return true;}private voID updateringtoneSummary(ringtonePreference preference,Uri ringtoneUri) { ringtone ringtone = ringtoneManager.getringtone(this,ringtoneUri); if (ringtone != null) preference.setSummary(ringtone.getTitle(this)); else preference.setSummary("Silent");}
请注意,与onSharedPreferenceChanged不同,在优先级更新之前调用onPreferenceChange,因此您必须使用newValue参数来获取所选数据,而不是从首选项中获取.
然后,将侦听器设置为OnResume:
@OverrIDeprotected voID onResume() { super.onResume(); // A patch to overcome OnSharedPreferenceChange not being called by ringtonePreference BUG ringtonePreference pref = (ringtonePreference) findPreference(getString(R.string.pref_ringtone)); pref.setonPreferencechangelistener(this);}
希望这可以帮助.
总结以上是内存溢出为你收集整理的android – 铃声优先级未在SharedPreferenceChanged上触发全部内容,希望文章能够帮你解决android – 铃声优先级未在SharedPreferenceChanged上触发所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)