如果变化发生在单独活动onShared preferenceChanged不解雇? [英] onSharedPreferenceChanged not fired if change occurs in separate activity?
问题描述
我在我的主要活动实施 onShared preferenceChanged
。
如果我改变preferences的主要活动,我的事件触发。
如果我通过我的preferences屏幕上改变preferences( preferenceActivity
)我的事件不会在preferences改变火(因为它是一个单独的活动,并单独提及共享preferences?)
没有任何人有一个如何,我应该去克服这种情况的建议?
谢谢!
EDIT1:我尝试添加的事件处理程序的权利在我的preference活动,但它永远不会触发。下面的方法,我的preference活动的onCreate期间调用。当我改变价值观,它永远不会打印消息( MSG()
是一个包装 Log.d
)。
私人无效registerChangeListener(){
共享preferences SP = preferenceManager.getDefaultShared preferences(本);
sp.registerOnShared preferenceChangeListener(新OnShared preferenceChangeListener(){
公共无效onShared preferenceChanged(共享preferences共享preferences,字符串键){
MSG(*****共享preference更新*****);
意图I =新意图();
i.putExtra(密钥,关键);
i.setAction(com.gtosoft.dash.settingschanged);
sendBroadcast(ⅰ);
// TODO:断火事件
}
});
}
在 OnShared preferenceChangeListener
被垃圾收集在你的情况,如果你使用一个匿名类。
要解决这个问题,请使用以下的code。在 preferenceActivity
来注册和注销的变化监听器:
公共类MyActivity扩展preferenceActivity工具
OnShared preferenceChangeListener {
@覆盖
保护无效onResume(){
super.onResume();
//设置一个监听器,每当一个重要变化
GET preferenceScreen()。getShared preferences()
.registerOnShared preferenceChangeListener(本);
}
@覆盖
保护无效的onPause(){
super.onPause();
//注销监听器,每当一个重要变化
GET preferenceScreen()。getShared preferences()
.unregisterOnShared preferenceChangeListener(本);
}
公共无效onShared preferenceChanged(共享preferences共享preferences,字符串键)
{
//做的东西
}
又见<一href="http://stackoverflow.com/questions/2542938/shared$p$pferences-onshared$p$pferencechangelistener-not-being-called-consistently/3104265#3104265">Shared$p$pferences.onShared$p$pferenceChangeListener没有所谓的一贯
I've implemented onSharedPreferenceChanged
in my main activity.
If I change the preferences in the main activity, my event fires.
If I change the preferences through my preferences screen (PreferenceActivity
) my event does NOT fire when preferences are changed (because it's a separate activity and separate reference to sharedPreferences?)
Does anybody have a recommendation of how I should go about overcoming this situation?
Thanks!
EDIT1: I tried adding the event handler right in my preference activity but it never fires. The following method gets called during onCreate of my preference activity. When I change values, it never prints the message (msg()
is a wrapper for 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
gets garbage collected in your case if you use an anonymous class.
To solve that problem use the following code in PreferenceActivity
to register and unregister a change listener:
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
}
see also SharedPreferences.onSharedPreferenceChangeListener not being called consistently
这篇关于如果变化发生在单独活动onShared preferenceChanged不解雇?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!