相关疑难解决方法(0)

SharedPreferences.onSharedPreferenceChangeListener未被一致地调用

我正在注册这样的偏好更改监听器(在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)

麻烦的是,听众并不总是被召唤.它最初几次更改首选项,然后在卸载并重新安装应用程序之前不再调用它.没有重新启动应用程序似乎修复它.

我发现一个邮件列表线程报告了同样的问题,但没有人真正回答他.我究竟做错了什么?

android android-preferences

250
推荐指数
4
解决办法
8万
查看次数

如果在单独的活动中发生更改,onSharedPreferenceChanged不会被触发?

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)

android sharedpreferences

68
推荐指数
3
解决办法
5万
查看次数