Estoy usando una PreferenceActivity para permitir que el usuario establezca algunos valores. Lo estoy alimentando con el archivo xml con las preferencias definidas.
He configurado todo android:defaultValue=""
para ellos.
Cuando inicio mi aplicación, necesito las preferencias, o si aún no están configuradas manualmente, quiero los valores predeterminados:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
Sin embargo, cuando android:defaultValue="true"
todavía tengo false
. Por lo tanto, parece que los valores predeterminados establecidos en el XML no se usan en ningún otro lugar que no sea al inicializar la pantalla de preferencias.
No quiero codificar los valores predeterminados en el getBoolean()
método. Entonces, ¿hay alguna manera de obtener los valores predeterminados con solo definirlos en 1 lugar?
fuente
onCreate()
deApplication
.readAgain
como verdadero no tiene nada que ver con que se sobrescriban las preferencias del usuario. Desde el Javadoc: Nota: esto NO restablecerá las preferencias a sus valores predeterminados.Tenga en cuenta que si está utilizando
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
para recuperar las preferencias que debe utilizar para establecer los valores predeterminados.
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Por ejemplo:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
Espero que esto pueda ayudar a alguien.
fuente
en la respuesta aceptada de Pixel:
se indica que los
false
medios que no se sobrescribirán los valores predeterminados. Esto no es lo que hace, es solo un indicador de eficiencia para detener el análisis si su aplicación tiene más de un punto de entrada. Desafortunadamente, la prueba no se realiza por archivo de preferencias, por lo que si tiene más de un archivo de preferencias, debe codificartrue
en todos menos en el primero.Si le preocupa la eficiencia, puede codificar algo como esto.
Si alguna vez agrega más preferencias compartidas, simplemente configure SPL en un número alto.
fuente
R.xml.prefs_device
,R.xml.prefs_test
yR.xml.prefs_admin
. Se puede crear un archivo de preferencias que contiene todas las Preferencias de lo anterior:R.xml.prefs_for_loading_default_values
. LuegoPreferenceManager.setDefaultValues(this, R.xml.prefs_for_loading_default_values, false);
onCreate()
una subclase deApplication
(registrado en el manifiesto), solo se llamará una vez por inicio de la aplicación de todos modos. Para el rendimiento, sería más relevante (en todo caso) no realizar el análisis cada vez que se inicia la aplicación (en lugar de eso, solo en su primer inicio) y esto es lo quefalse
hace. Por lo tanto, es más una cuestión de si necesita una verificación en cada inicio (por ejemplo, cuándo se pueden agregar nuevas preferencias) o si es suficiente si se hace en el primer inicio (o se restablecen las preferencias).Por ejemplo, extendiendo
DialogPreference
hago esto:mDefault puede ser:
fuente
También asegúrese de que nunca antes ha utilizado SharedPreferences. Para asegurarse de que no se modifiquen (lo que significa que setDefaultValues (this, xml, false) no tiene ningún efecto) desinstale su aplicación y cárguela nuevamente para asegurarse de que no se toque ningún valor. Eso me ayudó.
fuente