SharedPreference:OnSharedPreferenceChangeListener无法正常工作

时间:2014-03-19 00:26:56

标签: android

这是我的用例。

PreferenceActivity提供可选择的主题列表。当用户从列表中选择特定主题时,我希望立即进行效果。

截至目前,主题更改会影响所有已启动的新活动,但不会影响当前可见的PreferenceActivity和后台堆栈上的活动。

为了解决这个问题,我决定实现一个Sharedpreference更改侦听器,在更改时将清除backstack中的所有旧活动,并使用修改后的主题重新启动相同的类。

这是我尝试过的。

    SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
            SharedPreferences.OnSharedPreferenceChangeListener() {

                @Override
                public void onSharedPreferenceChanged(
                        SharedPreferences sharedPreferences, String key) {
                    Intent newIntent = new Intent(Settings.this,Settings.class);
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(newIntent);

                }

};

我尝试过简单的日志消息,例如Log.e("change", "pref changed"); 但看起来,这个听众根本就没有听取变化。

1 个答案:

答案 0 :(得分:2)

将其注册为SharedPreferences.registerOnSharedPreferenceChangeListener

另外,请记住,监听器保存在WeakHashMap中。这意味着您不能将匿名内部类用作侦听器,因为一旦离开当前作用域,它将成为垃圾收集的目标。因此,使您的侦听器成为您的活动的实例变量,或使活动本身实现侦听器。