Question

J'utilise un PreferenceActivity pour montrer certains paramètres de mon application. Je Gonflage les paramètres via un fichier xml pour que mon onCreate (et les méthodes de classe complète) ressemble à ceci:

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

Le javadoc de PreferenceActivity PreferenceFragment déclare que

  

Ces préférences sauveront automatiquement SharedPreferences lorsque l'utilisateur interagit avec eux. Pour récupérer une instance de SharedPreferences que la hiérarchie des préférences dans cette activité utilisera, getDefaultSharedPreferences d'appel (android.content.Context) avec un contexte dans le même paquet que cette activité.

Mais comment je reçois le nom du SharedPreference dans une autre activité? Je ne peux appeler

getSharedPreferences(name, mode)

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

Était-ce utile?

La solution

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

Mise à jour

Selon Préférences partagées | Applications du développeur Tutorial (partie 13) par Sai Geetha M N,

  

De nombreuses applications peuvent fournir un moyen de saisir les préférences de l'utilisateur sur le   les paramètres d'une application spécifique ou une activité. pour soutenir   cela, Android fournit un ensemble simple d'API.

     

Préférences sont typiquement des paires de valeurs de nom. Ils peuvent être stockés sous forme de   « Préférences partagées » à travers diverses activités dans une application (note   Actuellement, il ne peut pas être partagée entre les processus). Ou il peut être   quelque chose qui doit être stocké spécifique à une activité.

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

  2. Préférences traitées Activité:. Ces préférences ne peuvent être utilisés dans l'activité particulière et ne peuvent être utilisés 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 de 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) pour être utilisé pour faire référence aux 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. Il est le mode par défaut et signifie que le fichier créé sera accessible seulement par l'application appelante. Deux autres modes sont supportés MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE. Dans MODE_WORLD_READABLE autre application peut lire le fichier créé, mais ne peut pas le modifier. En cas de MODE_WORLD_WRITEABLE d'autres applications ont également des autorisations d'é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 des préférences:

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

Pour les valeurs magasin dans le fichier de préférences objet SharedPreference.Editor 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 en charge également des méthodes telles que remove() et clear() pour supprimer les valeurs de préférence à partir du fichier.

Préférences d'activité:

Les préférences partagées peuvent être utilisées 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 que vous souhaitez avoir une activité préférences privées, vous pouvez le faire avec l'aide de la méthode de 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érence.

Voici le code pour obtenir les préférences

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

Le code pour stocker des valeurs est également le même que dans le cas des 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 package définit les classes pour mettre en œuvre les préférences de l'application UI.

Pour voir quelques exemples vérifier stockage de données afficher sur le site des développeurs.

Autres conseils

Si vous n'avez pas accès à getDefaultSharedPreferenes(), vous pouvez utiliser getSharedPreferences(name, mode) à la place, il vous suffit de passer dans le nom.

Android crée ce nom (peut-être basé sur le nom du package de votre projet?). Vous pouvez l'obtenir en plaçant le code suivant dans un SettingsActivity de onCreate(), et de voir ce que preferencesName est.

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

La chaîne doit être quelque chose comme com.example.projectname_preferences. Code dur que quelque part dans votre projet, et le transmettre pour getSharedPreferences() et vous devriez être bon d'aller.

Déclarer 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);
}

Ensuite, appelez quand vous voulez mettre un pref:

putPref("myKey", "mystring", getApplicationContext());

appeler quand vous voulez obtenir un pref:

getPref("myKey", getApplicationContext());

ou vous pouvez utiliser cet objet https: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo ce qui simplifie encore tout

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);

devoir passer contexte autour de partout est vraiment moi ennuyeux. le code devient trop bavard et ingérable. Je le fais dans tous les projets à la place ...

public class global {
    public static Activity globalContext = null;

et le mettre 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;

aussi toutes les clés de la préférence doit être indépendant de la langue, je ne suis personne choqué a mentionné que.

getText(R.string.yourPrefKeyName).toString()

appeler très simplement comme ça 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-à-dire vrai / faux dans un fichier java -

Utilisation -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

Mise à jour 2019

Vous pouvez simplement utiliser la bibliothèque de PowerPreference

https://github.com/AliEsaAssadi/Android-Power-Preference

Obtenir instance de préférence partagée

Pour l'instance par défaut, vous devez appeler simplement

PowerPreference.getDefaultFile()

Ou si vous voulez un fichier de préférences spécifiques

PowerPreference.getFileByName(fileName)

Écriture de données:

PowerPreference.getDefaultFile().put(key,value)

Obtenir des données

PowerPreference.getDefaultFile().getString(key,value)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top