386 votes

Comment puis-je obtenir les SharedPreferences d’un PreferenceActivity dans Android ?

Je suis à l'aide d'un PreferenceActivity à montrer quelques réglages pour mon application. Je suis gonfler les paramètres via un fichier xml pour que mon onCreate (et compléter les méthodes de la classe) ressemble à ceci:

public class FooActivity extends PreferenceActivity {

 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  addPreferencesFromResource(R.xml.preference);
 }

}

La javadoc de PreferenceActivity PreferenceFragment états qui

Ces préférences sont automatiquement enregistrés sur SharedPreferences que l'utilisateur interagit avec eux. Pour récupérer une instance de SharedPreferences que la préférence de la hiérarchie dans cette activité permettra d'utilisation, appel getDefaultSharedPreferences(android.contenu.Contexte) avec un contexte dans le même package que cette activité.

Mais comment je reçois le nom de la SharedPreference dans une autre Activité? Je ne peux appeler

getSharedPreferences(nom, mode)

dans l'autre activité, mais j'ai besoin du nom de la SharedPreference qui a été utilisé par le PreferenceActivity. Quel est le nom ou comment puis-je le récupérer?

746voto

Pentium10 Points 68884
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Mise à jour

De nombreuses applications peuvent fournir un moyen de capturer les préférences de l'utilisateur pour une application spécifique ou de l'activité. Pour soutenir cela, Android fournit un simple ensemble d'Api.

Les préférences sont généralement des paires nom / valeur. Ils peuvent être stockées en tant que "Partagé Préférences" à travers diverses activités dans une application (note: actuellement, il ne peut pas être partagée à travers des processus). Ou il peut être quelque chose qui doit être stockée spécifique à une activité.

  1. Partagé Préférences: L'partagé les préférences peuvent être utilisés par toutes les composantes (activités, services, etc.) des applications.

  2. L'activité manipulée préférences: Ces préférences ne peuvent être utilisés au sein de l'activité particulière et ne peut pas être utilisé par d'autres composants de l'application.

Partagé Préférences:

L'partagé préférences sont gérés avec l'aide d' getSharedPreferences méthode de Context classe. Les préférences sont stockées dans un fichier par défaut(1) ou vous pouvez spécifier un nom de fichier(2) à être utilisé pour désigner les préférences.

(1) La méthode recommandée est d'utiliser le mode par défaut, sans spécifier le nom de fichier

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) Voici comment vous obtenez l'instance lorsque vous spécifiez le nom de fichier

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE est le mode de fonctionnement pour les préférences. C'est le mode par défaut et signifie que le fichier créé sera accessible uniquement par l'application appelante. Deux autres modes sont pris en charge MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE. En MODE_WORLD_READABLE autre application ne peut lire le fichier créé, mais ne peut pas le modifier. Dans le cas d' MODE_WORLD_WRITEABLE d'autres applications ont également des autorisations d'écriture pour le fichier créé.

Enfin, une fois que vous avez les préférences d'exemple, voici comment vous pouvez récupérer les valeurs stockées dans les préférences:

int storedPreference = preferences.getInt("storedInt", 0);

Pour stocker des valeurs dans le fichier de préférences SharedPreference.Editor objet doit être utilisé. Editor il est imbriqué dans l'interface SharedPreference classe.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

L'éditeur prend également en charge les méthodes comme remove() et clear() supprimer les valeurs préférées à partir du fichier.

L'Activité Préférences:

L'partagé les préférences peuvent être utilisés par d'autres composants de l'application. Mais si vous n'avez pas besoin de partager les préférences avec d'autres composants et qui souhaitent avoir une activité privée de vos préférences, vous pouvez le faire avec l'aide d' getPreferences() méthode de l'activité. L' getPreference méthode de getSharedPreferences() méthode avec le nom de la classe d'activité de la préférence de nom de fichier.

Voici le code pour obtenir les préférences

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Le code de stocker des valeurs est également la même que dans le cas du partage des préférences.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Vous pouvez également utiliser d'autres méthodes comme le stockage de l'activité de l'état dans la base de données. Note Android contient également un package appelé android.preference. Le paquet de définir des classes pour mettre en œuvre les préférences de l'application de l'INTERFACE utilisateur.

Voir plus d'exemples de vérifier Android de Stockage de Données post sur le site des développeurs.

28voto

Si vous n'avez pas accès à getDefaultSharedPreferenes(), vous pouvez utiliser getSharedPreferences(nom, mode) au lieu de cela, vous avez juste à passer du bon nom.

Android crée ce nom (éventuellement en se basant sur le nom du package de votre projet?). Vous pouvez l'obtenir en mettant le code suivant dans un SettingsActivity onCreate, et de voir ce que preferencesName est.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

La chaîne doit être quelque chose comme "com.exemple.projectname_preferences". Le code que quelque part dans votre projet, et de le transmettre à getSharedPreferences() et vous devriez être bon d'aller.

22voto

kc ochibili Points 321

Déclarer tout d’abord ces méthodes...

Puis appelez cela lorsque vous voulez mettre un pref :

appelons cela lorsque vous voulez obtenir un pref :

4voto

hamish Points 75

passer le contexte partout est vraiment ennuyeux moi. le code devient trop verbeux et ingérable. Je fais cela dans tous les projets au lieu de cela...

et ensemble, dans la principale activité créer

aussi toutes les clés de préférence doivent être indépendant, que je suis choqué, que personne n’a parlé que de langue.

Il donne maintenant la parole très simplement comme ça en une seule ligne de code

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