无法收听偏好设置更改?

时间:2017-08-15 21:25:06

标签: android android-sharedpreferences

class UserViewModel extends ViewModel{
    appPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener)
}}

private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;

public void subscribe() {

 preferenceChangeListener = (sharedPreferences, key) -> {

        }
    };
    appPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener);

};

public void unsubscribe(){
    appPrefs.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
}
从片段subscribe()unsubscribe()方法调用

onAttach()onDetach(),但在更改属性的状态时无效。正如您所看到的,preferenceChangeListener是类成员而不是方法属性。 在另一个片段中更改了preference的值,当我导航到另一个片段并返回preferenceChangeListener为null时,它在onAttach()中再次初始化,我看到了原因,但我不知道如何克服。

1 个答案:

答案 0 :(得分:3)

我建议registerOnSharedPreferenceChangeListener()片段onResume()unregisterOnSharedPreferenceChangeListener() onPause()。同时检查首选项密钥名称的名称。这可能是一个错字。

`

 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
            if (key.equals(KEY_PREF_SYNC_CONN)) {
                Preference connectionPref = findPreference(key);
                // Set summary to be the user-description for the selected value
                connectionPref.setSummary(sharedPreferences.getString(key, ""));
            }
        }

` 官方文档可以在这里找到:https://developer.android.com/guide/topics/ui/settings.html#Fragment