37 votes

PreferenceFragment - Différence entre getPreferenceManager () et getPreferenceScreen ()?

J'ai mis en place mon propre PreferenceFragment sous-classe (détaillé ici), et que vous voulez écouter de préférence des changements en son sein. PreferenceFragment vous offre deux façons de le faire:

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

et

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

Lequel doit être utilisé? Quelle est la différence? Je ne comprends pas vraiment la distinction qui est faite dans l'Android docs.

18voto

Dandre Allison Points 2434

La principale différence est dans leurs noms, prénoms, PreferenceManger des subventions de l'accès aux différentes fonctionnalités du développeur pour la gestion de l' SharedPreferences, comme la récupération de la carte actuelle des valeurs préférentielles ou réglage des préférences de l'utilisateur. à leurs valeurs par défaut. PreferenceScreen gère l'affichage d'un écran de préférences de l'utilisateur, de sorte que l'utilisateur peut assigner des valeurs. Parfois, cela signifie que l'affichage d'un élément de liste sur un écran avec d'autres préférences, que s'ouvre un autre écran avec plus de préférences lorsque vous cliquez dessus, comme c'est le cas lors de l' PreferenceScreens sont imbriqués.

Votre question implique que vous pensez qu'il ya une différence entre ce PreferenceManager.getSharedPreferences() et PreferenceScreen.getSharedPreferences() n', mais, d'après le code source, ils sont identiques.

PreferenceScreen:

public SharedPreferences getSharedPreferences() {
     if (mPreferenceManager == null) {
         return null;
     }

     return mPreferenceManager.getSharedPreferences();
 }

Si l' PreferenceManger et PreferenceScreen sont des entités différentes, mais l' SharedPreference de ceux de la méthode de retour doit être le même objet, depuis PreferenceScreen des appels de la méthode à partir d' PreferenceManager. J'espère que c'est la réponse que vous avez été la recherche de.

Si vous avez le choix, allez-y avec PreferenceManager.getSharedPreferences(), il est de plus évident et de moins en moins appel de méthode à l'interne.

Fait amusant:

PreferenceFragment:

public PreferenceManager getPreferenceManager() {
    return mPreferenceManager;
}

public PreferenceScreen getPreferenceScreen() {
    return mPreferenceManager.getPreferenceScreen();
}

16voto

JoseLSegura Points 858

Le premier obtient les préférences partagées de PreferenceManager. La seconde, de PefereneScreen, hérite de cette méthode de la classe Preference.

Je pense que c'est une différence non fonctionnelle, car les deux renvoient probablement la même instance des objets SharedPreferences, mais je pense qu'il est plus clair d'utiliser la première (en utilisant PreferenceManager plutôt que PreferenceScreen).

13voto

Shruti Points 3073

PreferenceScreen voir domentation ici

PreferenceScreen classe peuvent apparaître à deux endroits:

  • Lorsqu'un PreferenceActivity points, il est utilisé comme racine et n'est pas démontré (seulement le contenu des préférences affichées).
  • Lorsqu'il apparaît à l'intérieur d'une autre préférence de la hiérarchie, il est montré et sert de passerelle vers un autre écran de préférences (par montrer un autre écran de préférences, comme une boîte de Dialogue ou par l'intermédiaire d'un startActivity(android.contenu.L'intention) de la getIntent()). L' les enfants de cet PreferenceScreen ne sont PAS affichées dans l'écran qui cette PreferenceScreen est montré dans la. Au lieu de cela, un écran séparé sera affiche lorsque cette préférence est activée.

PreferenceManager voir la documentation ici:

Différence :

getPreferenceManager () retourne la gestion des préférences associées avec le fragment.

getPreferenceScreen () renvoie la racine PreferenceScreen c'est à dire la racine de préférence de l'écran utilisé dans le fragment de préférence un fichier xml(preferences.xml).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X