qual é a Melhor maneira para uso compartilhado de preferências entre as atividades
-
27-09-2019 - |
Pergunta
Eu tenho uma preferência de usuário no meu aplicativo, que é usado por diferentes actividades.Gostaria de saber a melhor maneira de utilizar as preferências entre diferentes atividades no meu App.
Eu tive esta idéia de criar um shared preferência objeto da atividade principal e de lá enviar intenções para as diferentes actividades para tomar ações.Teria que trabalhar...?
Ou apenas continuar a chamar getsharedpreferences()
de cada atividade,..?
Obrigado.
Solução
O envio de preferências compartilhadas através das intenções parece supercomplicado. Você pode envolver as preferências compartilhadas com algo como o abaixo e chamar os métodos diretamente de suas atividades:
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();
}
}
Outras dicas
Você pode usar este caminho e declarar mesmas variáveis com o mesmo nome em todas as atividades onde o pretende utilizar.
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);
}
Aqui, inicialmente, wordCount vai dar 4;E quando você editar wordCount e deseja armazenar novamente
editor.putInt("wordCount", 6);
editor.commit();
Você tem que declarar este mesmas variáveis em atividades de onde você quer para uso compartilhado de preferências.E é melhor você chamar getSharedPreferences em cada atividade.
Eu não acho que passando esse a preferência na intenção irá funcionar.
É claro que você pode usar preferências compartilhadas em seus aplicativos.
Se você tiver mais do que um tipo simples do que string ou int, poderá usar um singleton ou estender a classe de aplicativo que será acessível por todas as atividades do seu aplicativo. => Sem acesso ao disco aqui. Simplesmente mantido na memória.