2010-05-04 9 views
23

¿Cómo se obtiene el valor predeterminado de una preferencia de Android definida en XML? No quiero repetir la definición del valor predeterminado tanto en el código como en las preferencias XML.Valor predeterminado de la preferencia de Android

+1

publicar su archivo de preferencias xml, Qué quiere decir un PREFERENCE – Jorgesys

Respuesta

61

Puede definir el valor por defecto de recursos (/values/bool.xml):

<resources> 
    <bool name="mypreference_default">true</bool> 
</resources> 

Usar el valor en el preferences.xml:

<CheckBoxPreference 
    android:defaultValue="@bool/mypreference_default" 
    android:key="mypreference" 
    android:title="@string/mypreference_title" /> 

Luego use en el código:

SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context); 
Boolean value = context.getResources().getBoolean(R.bool.mypreference_default); 
Boolean b = p.getBoolean("mypreference", value); 
+0

Una buena manera de hacerlo. ¡Gracias por compartir! – pilcrowpipe

+5

Eso es exactamente lo que estaba buscando, gracias. Una sugerencia más: defina los recursos que no están en strings.xml pero en un archivo separado (por ejemplo, constants.xml) para evitar la localización. – schnatterer

+6

@schnatterer: mover las cadenas a un archivo diferente no evitará la localización. El nombre de archivo 'strings.xml' es solo una convención. Cualquier recurso puede ser localizado colocándolo en la subcarpeta 'res /' correcta. Aunque colocar las configuraciones predeterminadas en un archivo de recursos separado es probablemente una buena idea. –

11

Primero debe definir los valores predeterminados en su archivo XML de preferencia. A continuación, puede rellenar las preferencias con los valores por defecto en su actividad principal, llamando al:

PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

Cuando necesite recuperar una cierta preferencia sólo llame:

int value = prefs.getInt("key", null); 

Desde sus preferencias están pobladas que no lo hará obtener null valor.

+2

Esto todavía no protege contra la posible situación en la que alguien en la línea elimina una preferencia de la XML y olvida actualizar el código de Java que lo solicita. En esa situación, la aplicación aún compilará, pero terminará con una NullPointerException. – idolize

+0

Sí, esto es cierto, pero luego debe escribirse una Prueba funcional para probar si todas las preferencias necesarias se recuperan de XML. – pixel

+1

esto realmente no funcionó en absoluto para mí. los valores predeterminados no se establecieron después de llamar a este método. – moonlightcheese

1

Crear integer.xml bajo res/values para almacenar constantes enteras.

En referencia prefereces.xml"@integer/default_brightness"

En el código context.getResources().getInteger(R.integer.default_brightness)

Cuestiones relacionadas