J'utilise PreferenceActivity pour afficher certains paramètres de mon application. Je gonfle les paramètres via un fichier XML pour que ma méthode onCreate (et ses méthodes de classe complètes) ressemble à ceci:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
Le javadoc de PréférenceActivité PreferenceFragment indique que
Ces préférences seront automatiquement enregistrées dans les préférences partagées au fur et à mesure que l'utilisateur interagira avec elles. Pour récupérer une instance de SharedPreferences que la hiérarchie des préférences de cette activité utilisera, appelez getDefaultSharedPreferences (Android.content.Context) avec un contexte dans le même package que cette activité.
Mais comment puis-je obtenir le nom de la référence partagée dans une autre activité? Je peux seulement appeler
getSharedPreferences(name, mode)
dans l’autre activité, mais j’ai besoin du nom de SharedPreference utilisé par PreferenceActivity. Quel est le nom ou comment puis-je le récupérer?
import Android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
Mettre à jour
Selon Préférences partagées | Android Tutoriel du développeur (partie 13) par Sai Geetha M N,
De nombreuses applications peuvent fournir un moyen de capturer les préférences de l'utilisateur sur les paramètres d'une application ou d'une activité spécifique. Pour cela, Android fournit un ensemble simple d’API.
Les préférences sont généralement des paires nom-valeur. Ils peuvent être stockés en tant que "Préférences partagées" pour diverses activités dans une application (notez qu’il ne peut pas être partagé entre plusieurs processus). Ou ce peut être quelque chose qui doit être stocké spécifique à une activité.
Préférences partagées: Les préférences partagées peuvent être utilisées par tous les composants (activités, services, etc.) des applications.
Préférences d'activité gérée: ces préférences ne peuvent être utilisées qu'au sein d'une activité particulière et ne peuvent pas être utilisées par d'autres composants de l'application.
Préférences partagées:
Les préférences partagées sont gérées à l'aide de la méthode getSharedPreferences
de la classe Context
. Les préférences sont stockées dans un fichier par défaut (1) ou vous pouvez spécifier un nom de fichier (2) à utiliser pour faire référence aux préférences.
(1) La méthode recommandée consiste à utiliser le mode par défaut, sans spécifier le nom du fichier.
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) Voici comment vous obtenez l'instance lorsque vous spécifiez le nom du fichier.
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
est le mode de fonctionnement des préférences. C'est le mode par défaut et signifie que le fichier créé sera accessible uniquement par l'application appelante. Les deux autres modes pris en charge sont MODE_WORLD_READABLE
et MODE_WORLD_WRITEABLE
. Dans MODE_WORLD_READABLE
, une autre application peut lire le fichier créé mais ne peut pas le modifier. Dans le cas de MODE_WORLD_WRITEABLE
, d'autres applications disposent également d'autorisations en écriture pour le fichier créé.
Enfin, une fois que vous avez l’instance de préférences, voici comment vous pouvez récupérer les valeurs stockées à partir des préférences:
int storedPreference = preferences.getInt("storedInt", 0);
Pour stocker les valeurs dans le fichier de préférences SharedPreference.Editor
, l’objet doit être utilisé. Editor
est une interface imbriquée dans la classe SharedPreference
.
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
Editor prend également en charge des méthodes telles que remove()
et clear()
pour supprimer les valeurs de préférence du fichier.
Préférences d'activité:
Les préférences partagées peuvent être utilisées par d'autres composants d'application. Mais si vous n'avez pas besoin de partager les préférences avec d'autres composants et si vous souhaitez que vos préférences d'activité soient privées, vous pouvez le faire à l'aide de la méthode getPreferences()
de l'activité. La méthode getPreference
utilise la méthode getSharedPreferences()
avec le nom de la classe d'activité pour le nom du fichier de préférences.
Voici le code pour obtenir les préférences
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
Le code pour stocker les valeurs est également le même que dans le cas de préférences partagées.
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 telles que le stockage de l'état d'activité dans la base de données. Remarque Android contient également un package appelé Android.preference
. Le paquet définit les classes pour implémenter l'interface utilisateur des préférences de l'application.
Pour voir d'autres exemples, consultez Android Stockage de données sur le site des développeurs.
Si vous n'avez pas accès à getDefaultSharedPreferenes()
, vous pouvez utiliser getSharedPreferences(name, mode)
à la place, il vous suffit de passer le nom correct.
Android crée ce nom (éventuellement en fonction du nom du package de votre projet?). Vous pouvez l'obtenir en mettant le code suivant dans un SettingsActivity
onCreate()
et en voyant ce que preferencesName
est.
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
La chaîne devrait être quelque chose comme com.example.projectname_preferences
. Codez-le quelque part dans votre projet et transmettez-le à getSharedPreferences()
et vous devriez être prêt à partir.
Déclarez ces méthodes d'abord ..
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
Appelez ensuite ceci quand vous voulez mettre un pref:
putPref("myKey", "mystring", getApplicationContext());
appelez ceci lorsque vous souhaitez obtenir un préf:
getPref("myKey", getApplicationContext());
Ou vous pouvez utiliser cet objet https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo = qui simplifie encore plus loin
Exemple:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
le fait de devoir passer d’un contexte à un autre me gêne vraiment. le code devient trop bavard et ingérable. Je le fais dans chaque projet à la place ...
public class global {
public static Activity globalContext = null;
et le définir dans l'activité principale créer
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
de plus, toutes les clés de préférence doivent être indépendantes de la langue, je suis choqué que personne ne l’ait mentionné.
getText(R.string.yourPrefKeyName).toString()
maintenant, appelez-le très simplement comme ceci dans une ligne de code
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
si vous avez une case à cocher et que vous souhaitez récupérer sa valeur, c’est-à-dire true/false dans n’importe quel fichier Java -
Utilisation--
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
Mis à jour en 2019
Vous pouvez simplement utiliser la bibliothèque PowerPreference
https://github.com/AliEsaAssadi/Android-Power-Preference
Pour obtenir l'instance par défaut, il vous suffit d'appeler
PowerPreference.getDefaultFile()
Ou si vous voulez un fichier de préférence spécifique
PowerPreference.getFileByName(fileName)
PowerPreference.getDefaultFile().put(key,value)
PowerPreference.getDefaultFile().getString(key,value)