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()中再次初始化,我看到了原因,但我不知道如何克服。
答案 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