我已经实施了onSharedPreferenceChanged
在我的主要活动中。
如果我更改主要活动中的首选项,我的事件就会触发。
如果我通过我的首选项屏幕更改首选项(PreferenceActivity
)当首选项更改时,我的事件不会触发(因为它是一个单独的活动和对共享首选项的单独引用?)
有人建议我应该如何克服这种情况吗?
Thanks!
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
}
});
}
The OnSharedPreferenceChangeListener
如果您使用匿名类,则会在您的情况下收集垃圾。
要解决该问题,请使用以下代码PreferenceActivity
注册和取消注册更改侦听器:
public class MyActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
@Override
protected void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)
{
// do stuff
}
此外请注意,只有实际值发生变化时才会调用侦听器。再次设置相同的值将不会触发侦听器。
也可以看看SharedPreferences.onSharedPreferenceChangeListener 未被一致调用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)