我正在注册这样的偏好更改监听器(在onCreate()我的主要活动中):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(
SharedPreferences prefs, String key) {
System.out.println(key);
}
});
Run Code Online (Sandbox Code Playgroud)
麻烦的是,听众并不总是被召唤.它最初几次更改首选项,然后在卸载并重新安装应用程序之前不再调用它.没有重新启动应用程序似乎修复它.
我发现一个邮件列表线程报告了同样的问题,但没有人真正回答他.我究竟做错了什么?
我onSharedPreferenceChanged在我的主要活动中实施了.
如果我更改主活动中的首选项,则会触发我的事件.
如果我通过我的首选项屏幕更改首选项(PreferenceActivity)我的事件不会在首选项被更改时触发(因为它是一个单独的活动和对sharedPreferences的单独引用?)
有人建议我应该如何克服这种情况?
谢谢!
EDIT1:我尝试在我的首选项活动中添加事件处理程序但它永远不会触发.在我的首选项活动的onCreate期间调用以下方法.当我更改值时,它永远不会打印消息(msg()是包装器Log.d).
private void registerChangeListener () {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener () {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
msg (" ***** Shared Preference Update ***** ");
Intent i = new Intent();
i.putExtra("KEY", key);
i.setAction("com.gtosoft.dash.settingschanged");
sendBroadcast(i);
// TODO: fire off the event
}
});
}
Run Code Online (Sandbox Code Playgroud)