如果变化发生在单独活动onShared preferenceChanged不解雇? [英] onSharedPreferenceChanged not fired if change occurs in separate activity?

查看:112
本文介绍了如果变化发生在单独活动onShared preferenceChanged不解雇?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的主要活动实施 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆