简体   繁体   English

无法听取偏好变化?

[英]Could not listen to preference changes?

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() and unsubscribe() are called from Fragment onAttach() and onDetach() methods ,but not working when the state of the property is changed. subscribe()unsubscribe()从Fragment onAttach()onDetach()方法调用,但在属性状态更改时不起作用。 And as you can see preferenceChangeListener is class member not a method property. 正如您所看到的,preferenceChangeListener是类成员而不是方法属性。 the value of preference is changed in another fragment, and when I'm navigating to another fragment and coming back preferenceChangeListener is null it initialized again in onAttach() ,I see the reason ,but I don't know how to overcome. 在另一个片段中更改了preference的值,当我导航到另一个片段并返回preferenceChangeListener为null时,它在onAttach()中再次初始化,我看到原因,但我不知道如何克服。

I recommend to registerOnSharedPreferenceChangeListener() during fragment onResume() and unregisterOnSharedPreferenceChangeListener() at onPause() . 我建议在片段onResume() registerOnSharedPreferenceChangeListener()期间registerOnSharedPreferenceChangeListener() onResume() ,在onPause()unregisterOnSharedPreferenceChangeListener() onPause() Also check the preference key name what is observed. 还要检查首选项名称的内容。 It could be a typo there. 这可能是一个错字。

` `

 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, ""));
            }
        }

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM