Preferencias de Android: ¿Cómo cargar los valores predeterminados cuando el usuario no ha utilizado la pantalla de preferencias?
Estoy usando una PreferenceActivity para permitir que el usuario establezca algunos valores. Estoy alimentando el archivo xml con las preferencias definidas.
He configurado todos los android:defaultValue=""
para ellos.
- Android: PreferenceFragment sólo muestra primera preferencia
- ¿Es la lectura / escritura preferencias una operación costosa?
- ¿Cómo puedo agregar por programación EditTextPreferences a mi PreferenceFragment?
- ¿Cómo se declara el tipo de preferencia de Android?
- Cómo tocar EditTextPrefences de otra actividad u otro hilo
Cuando inicio mi aplicación, necesito las preferencias, o si no están configuradas manualmente, quiero los valores por defecto:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); boolean value = prefs.getBoolean("key"), false);
Sin embargo, cuando android:defaultValue="true"
todavía me sale false
. Por lo tanto, parece que los valores defaultValues establecidos en el XML no se utilizan en ningún lugar, sino al inicializar la pantalla de preferencias.
No quiero codificar los valores por defecto en el método getBoolean()
. Por lo tanto, hay una manera de obtener los valores por defecto con sólo definir estos en 1 lugar?
- Uso de preferencias no predeterminadas en PreferenceActivity
- Obtener preferencias en AppWidget Provider
- ¿Cómo hacer que SharedPreferences de una PreferenceActivity esté configurada como predeterminada en Android?
- Abrir EditTextPreference a través del código (programatically)
- Usar TimePicker o DatePicker en la pantalla Preferencias en Android
- ¿cómo puedo establecer el valor marcado en ListPreference
- Almacenar cookie en las preferencias compartidas
- Cómo utilizar PreferenceFragment?
Esta pregunta es similar a la mía:
Inicializar-preferencias-de-xml-en-actividad principal
Sólo use este código en el método onCreate
:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
readAgain
sus preferencias desde XML y el último parámetro ( readAgain
) garantizará que las preferencias del usuario no se sobrescribirán.
Echa un vistazo a PreferenceManager.setDefaultValues en la API de Android para una investigación más detallada.
Tenga en cuenta que si está usando
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
Para recuperar las preferencias que tiene que usar
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Para establecer los valores predeterminados!
Por ejemplo:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
Espero que esto pueda ayudar a alguien.
En la respuesta aceptada de Pixel:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Se afirma que el false
significa que los valores predeterminados no se sobrescribirán. Esto no es lo que hace, es sólo 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 preferencia, por lo que si tiene más de un archivo de preferencia, debe codificar true
en todos excepto en el primero.
Si usted está preocupado por la eficiencia, podría codificar algo como esto.
final static private int SPL = 1; SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); if (sp.getInt("spl", 0) != SPL) { PreferenceManager.setDefaultValues(this, R.xml.prefs1, true); PreferenceManager.setDefaultValues(this, R.xml.prefs2, true); sp.edit().putInt("spl", SPL).apply(); }
Si alguna vez agrega más preferencias compartidas, solo establece SPL en un número alto.
Por ejemplo extendiendo DialogPreference
hago esto:
@Override protected void onSetInitialValue(boolean restore, Object defaultValue) { super.onSetInitialValue(restore, defaultValue); if (restore) { mValue = shouldPersist() ? getPersistedString(mDefault) : mDefault; } else { mValue = mDefault; } }
MDefault puede ser:
- MContext.getResources (). GetString (attrs.getAttributeResourceValue (androidns, "defaultValue", 100));
- Algo que ha indexado en R.
También asegúrese de que nunca ha utilizado SharedPreferences antes. Para asegurarse de que no se hayan cambiado (lo que significa que setDefaultValues (esto, xml, false) no tiene ningún efecto) desinstale su aplicación y vuelva a cargarla para asegurarse de que no se toquen valores. Esto me ayudó.
- ¿Cuál es el tamaño de texto predeterminado en Android?
- ¿BroadcastReceiver.onReceive siempre se ejecuta en el subproceso de interfaz de usuario?