OnSharedPreferenceChangeListener未按预期工作

时间:2017-07-09 01:58:42

标签: android sharedpreferences listener android-sharedpreferences

我有一个使用Android的SharedPreferences的应用。当我的ListPreference发生变化时,我正在使用OnSharedPreferenceChangeListener来执行某些操作。我在MainActivity的onStart()方法中初始化我的OnSharedPreferenceChangeListener并注册它。我在onStop()中取消注册。由于某种原因,它根本不起作用。如果我在活动的onCreate()中注册它并且从不注销它似乎工作正常。为什么是这样?当我第一次启动Activity并尝试更改首选项时,甚至会发生这种情况,因此onStop()永远不会被调用,并且侦听器永远不会被取消注册。相关代码如下:

private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scoring);

        // Initialize our game rules preference to its default value
        PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

        setupViews(GameEngine.BAGS_PER_ROUND);
        startNewGame();
    }

    @Override
    protected void onStart() {
        super.onStart();

        prefs = PreferenceManager.getDefaultSharedPreferences(this);

        prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                if (key.equals("game_mode_list")) {
                    startNewGame();
                    Log.d(TAG, "ListPreference clicked");
                }
            }
        };
        prefs.registerOnSharedPreferenceChangeListener(prefListener);
    }

    @Override
    protected void onStop() {
        super.onStop();

        // Unregister changeListener to prevent leaks (although Android uses a weak reference)
        prefs.unregisterOnSharedPreferenceChangeListener(prefListener);
    }

1 个答案:

答案 0 :(得分:0)

getDefaultSharedPreferences()将获取您应用的默认偏好设置文件。如果您正在尝试收听另一个文件中的更改(即,如果您的偏好设置在您自己命名的文件中),则应使用getSharedPreferences(String nameOfFile, int mode)

getSharedPreferences in android docs

相关问题