Estou usando uma PreferenceActivity para permitir que o usuário defina alguns valores. Estou alimentando o arquivo xml com as preferências definidas.
Eu configurei tudo android:defaultValue=""
para eles.
Quando eu inicio meu aplicativo, preciso das preferências ou, se ainda não foram definidas manualmente, quero os valores padrão:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
No entanto, quando android:defaultValue="true"
eu ainda consigo false
. Portanto, parece que os valores padrão definidos no XML não são usados em nenhum lugar, exceto ao inicializar a tela de preferências.
Não quero codificar os valores padrão no getBoolean()
método. Então, há uma maneira de obter os valores padrão definindo-os em apenas um lugar?
fonte
onCreate()
deApplication
.readAgain
como verdadeiro não tem nada a ver com as preferências do usuário sendo substituídas. Do Javadoc: Observação: isso NÃO redefinirá as preferências de volta aos valores padrão.Esteja ciente de que se você estiver usando
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
para recuperar as preferências, você deve usar para definir padrões!
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Por exemplo:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
Espero que isso possa ajudar alguém.
fonte
na resposta aceita do Pixel:
afirma-se que isso
false
significa que os padrões não serão substituídos. Não é isso que ele faz, é apenas um sinalizador de eficiência para interromper a análise se seu aplicativo tiver mais de um ponto de entrada. Infelizmente, o teste não é feito por arquivo de preferência, portanto, se você tiver mais de um arquivo de preferência, deverá codificartrue
em todos, exceto no primeiro.Se você está preocupado com a eficiência, pode codificar algo assim.
Se você adicionar mais preferências compartilhadas, basta definir o SPL para um número alto.
fonte
R.xml.prefs_device
,R.xml.prefs_test
eR.xml.prefs_admin
. Você pode criar um arquivo prefs que contém todas as preferências do acima:R.xml.prefs_for_loading_default_values
. Em seguida, use isso comPreferenceManager.setDefaultValues(this, R.xml.prefs_for_loading_default_values, false);
onCreate()
de uma subclasse deApplication
(registrado no manifesto), ele só será chamado uma vez por inicialização do aplicativo de qualquer maneira. Para o desempenho, seria mais relevante (se for o caso) não fazer a análise cada vez que o aplicativo é iniciado (em vez disso, apenas na primeira inicialização) e é isso quefalse
acontece. Portanto, é mais uma questão de saber se você precisa de uma verificação em cada inicialização (por exemplo, quando novas preferências podem ser adicionadas) ou se é o suficiente se feito na primeira inicialização (ou redefinição de preferências).Por exemplo, estendendo
DialogPreference
I do this:mDefault pode ser:
fonte
Além disso, certifique-se de nunca ter usado SharedPreferences antes. Para garantir que eles não sejam alterados (o que significa setDefaultValues (this, xml, false) não tem efeito), desinstale seu aplicativo e carregue-o novamente para garantir que nenhum valor seja alterado. Isso me ajudou.
fonte