PreferenceFragment - Difference between getPreferenceManager() and getPreferenceScreen()?
android, android-preferences, android-sharedpreferences
Solution
The core difference is in their names, `PreferenceManger` grants access to different functionalities to the developer for managing `SharedPreferences`, such as retrieving the map of current preference values or setting user preferences. to their default values. `PreferenceScreen` handles displaying a screen of user preferences, so that the user can assign values to them. Sometimes this means displaying a list item on a screen with other preferences, that opens another screen with more preferences when clicked, as is the case when `PreferenceScreen`s are nested.
Your question implies that you think there is a difference between what `PreferenceManager.getSharedPreferences()` and `PreferenceScreen.getSharedPreferences()` does, but according to the source code, they are identical.
`PreferenceScreen`:
public SharedPreferences getSharedPreferences() {
if (mPreferenceManager == null) {
return null;
}
return mPreferenceManager.getSharedPreferences();
}
So the `PreferenceManger` and `PreferenceScreen` are different entities, but the `SharedPreference` those method return should be the same object, since `PreferenceScreen` calls the method from `PreferenceManager`. I hope that is the answer you've been seeking.
If you have a choice, go with `PreferenceManager.getSharedPreferences()`, it's more obvious and one fewer method call internally.
Fun fact:
`PreferenceFragment`:
public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}
Problem
I've implemented my own PreferenceFragment subclass (detailed here), and want to listen for preference changes within it. PreferenceFragment provides you with two ways of doing this: ``` getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); ``` and ``` getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); ``` Which one should be used? What's the difference? I don't really understand the distinction made in the Android docs.