Je suis actuellement le cours Udacity "Développement d'applications Android". Dans le segment "Leçon 3: Nouvelles activités et intentions> Utiliser les références partagées", l'instructeur m'a demandé de creuser autour du site de développement Android pour savoir comment obtenir les préférences utilisateur de SharedPreferences
. Cependant, je l'ai trouvé différent entre la documentation officielle et la solution du cours.
La solution } _ du cours Udacity dit, pour saisir une instance SharedPreferences
pour la PreferenceActivity
, vous devez appeler:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
(où getActivity()
est simplement la Context
ici car elle est appelée dans une Fragment
.)
Bien que la documentation officielle sur le site du développeur Android indique que vous devez appeler:
SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
Alors, quelle est la différence entre PreferenceManager.getDefaultSharedPreferences(Context context)
et Activity.getPreferences(int mode)
?
Remarque: Cette question ne concerne en rien getSharedPreferences()
qui nécessite un nom de fichier. Il s'agit de la différence entre getPreferences()
et getDefaultSharedPreferences()
.
Merci d'avance.
En suivant le lien que vous avez fourni à la documentation Android
getSharedPreferences () - Utilisez cette option si vous avez besoin de plusieurs fichiers de préférences identifiés par leur nom, que vous spécifiez avec le premier paramètre.
getPreferences () - Utilisez ceci si vous n'avez besoin que d'un seul fichier de préférences pour votre activité. Comme ce sera le seul fichier de préférences pour votre activité, vous ne fournissez pas de nom.
Ainsi, utilisez getSharedPreferences lorsque les données que vous souhaitez enregistrer/récupérer peuvent être utilisées à partir de différentes activités dans l'application. Si ces préférences ne seront utilisées que dans une seule activité, vous pouvez utiliser getPreferences.
Edit: notez également que, comme indiqué dans le message que vous avez lié, "getDefaultSharedPreferences utilisera un nom par défaut tel que" com.example.something_preferences ", mais getSharedPreferences nécessitera un nom"
L'une des principales différences: getPreferences () renvoie un fichier uniquement lié à l'activité à partir de laquelle il est ouvert. Alors que getDefaultSharedPreferences () renvoie les préférences globales de l'application. J'ai appris ça à la dure hier.
Si vous regardez dans PreferenceManager:
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
/**
* Returns the name used for storing default shared preferences.
*
* @see #getDefaultSharedPreferences(Context)
* @see Context#getSharedPreferencesPath(String)
*/
public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
Donc, getDefaultSharedPreferences () utilise la méthode getSharedPreferences () avec votre nom de package d'application et votre mode privé. Si vous utilisez getPreferences () à partir de activity, il utilisera la même méthode getSharedPreferences () mais avec getLocalClassName ();
Depuis le premier article lié ci-dessous: " Remarque: les API SharedPreferences servent uniquement à lire et à écrire des paires clé-valeur. Ne les confondez pas avec les API de préférence, qui vous aident à créer une interface utilisateur ils utilisent SharedPreferences pour implémenter les paramètres de l’application). "
http://developer.Android.com/training/basics/data-storage/shared-preferences.html