2010-10-29 5 views
18

J'ai une préférence utilisateur dans mon application, qui est utilisée par différentes activités. Je voudrais savoir la meilleure façon d'utiliser ces préférences entre différentes activités dans mon application.Quelle est la meilleure façon d'utiliser les préférences partagées entre les activités

J'ai cette idée de créer un objet de préférence partagé à partir de l'activité principale et d'envoyer des intentions aux différentes activités pour effectuer des actions. Cela fonctionnerait-il ...?

Ou juste continuer à appeler getsharedpreferences() de chaque activité ..?

Merci.

Répondre

23

L'envoi de préférences partagées à travers des intentions semble trop compliqué. Vous pouvez envelopper les préférences partagées avec quelque chose comme ci-dessous et appeler les méthodes directement à partir de vos activités:

public class Prefs { 
    private static String MY_STRING_PREF = "mystringpref"; 
    private static String MY_INT_PREF = "myintpref"; 

    private static SharedPreferences getPrefs(Context context) { 
     return context.getSharedPreferences("myprefs", 0); 
    } 

    public static String getMyStringPref(Context context) { 
     return getPrefs(context).getString(MY_STRING_PREF, "default"); 
    } 

    public static int getMyIntPref(Context context) { 
     return getPrefs(context).getInt(MY_INT_PREF, 42); 
    } 

    public static void setMyStringPref(Context context, String value) { 
     // perform validation etc.. 
     getPrefs(context).edit().putString(MY_STRING_PREF, value).commit(); 
    } 

    public static void setMyIntPref(Context context, int value) { 
     // perform validation etc.. 
     getPrefs(context).edit().putInt(MY_INT_PREF, value).commit(); 
    } 
} 
+0

hmm .. trop de choix ici. mais en réalité ma préférence d'utilisateur contient des cases à cocher qui effectue une action dans une liste. donc je pourrais aller avec les suggestions ici. Le seul problème est qu'il est peuplé d'un customCursorAdapter, donc jjst trouver où l'appeler – irobotxxx

+1

ouais .. ça marche, je me serais vraiment tiré dans le pied si j'avais traversé la voie de l'intention! – irobotxxx

+0

Avez-vous rencontré un problème de performance en utilisant cette approche? parce que j'utilise la même approche et j'ai un problème de performance mais je ne sais pas si cette approche est la cause du problème – AlAsiri

6

Vous pouvez utiliser cette méthode et déclarer les mêmes variables avec le même nom dans toutes les activités que vous souhaitez utiliser.

public static final String PREFS_NAME = "MyPrefsFile"; 
    static SharedPreferences settings; 
    SharedPreferences.Editor editor; 
    int wordCount; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    settings = getSharedPreferences(PREFS_NAME, 0); 
    editor = settings.edit(); 

    wordCount = settings.getInt("wordCount", 4); 

    } 

Ici, initialement, wordCount donnera 4; Et lorsque vous modifiez wordcount et que vous voulez stocker à nouveau

editor.putInt("wordCount", 6); 
    editor.commit(); 

Vous devez déclarer ces mêmes variables dans les activités où vous souhaitez utiliser les préférences partagées. Et il vaut mieux appeler getSharedPreferences dans chaque activité.

Je ne pense pas que passer cette préférence dans l'intention fonctionnera.

+0

Cela a fonctionné pour moi et est simple. –

0

Vous pouvez bien sûr utiliser les préférences partagées dans vos applications.

Si vous avez plus d'un type simple que string ou int, vous pouvez utiliser un singleton ou étendre la classe d'application qui sera accessible par toutes les activités de votre application. => Pas d'accès au disque ici. Simplement gardé en mémoire.

Questions connexes