2010-04-24 5 views
18

¿Es posible definir una ListPreference en Xml y recuperar el valor de SharedPreferences usando getInt? Aquí está mi xml:¿Cómo se obtiene una ListPreference de Android definida en Xml cuyos valores son enteros?

<ListPreference android:key="@string/prefGestureAccuracyKey" 
    android:title="@string/prefGestureAccuracyTitle" android:summary="@string/prefGestureAccuracyDesc" 
    android:entries="@array/prefNumberAccuracyLabels" android:entryValues="@array/prefNumberAccuracyValues" 
    android:dialogTitle="@string/prefGestureAccuracyDialog" 
    android:persistent="true" android:defaultValue="2" 
    android:shouldDisableView="false" /> 

Y quiero obtener el valor con algo como: int (clave, defaultValue) val = sharedPrefs.getInt.

Por el momento tengo que usar getString y analizar el resultado.

+0

que deberían funcionar de acuerdo con el manual de http://developer.android.com/intl/de/reference/android/content/SharedPreferences.html – Pentium10

+0

I don' t recibe tu pregunta. ¿Qué valor estás dispuesto a obtener? – Macarse

+0

Bueno, Xml crea una preferencia cuyo tipo es String not Entero. Me gustaría una preferencia cuyo valor está fuertemente tipeado como int.Esta pregunta surgió de una anterior que escribí que explica el contexto: http://stackoverflow.com/questions/2705091/how-doi-i-cast-from-int-to-generic-type-integer –

Respuesta

39

Según tengo entendido, ListPreference solo puede funcionar con matrices de cadenas. Tendrá que usar getString() y convertirlo a un número entero usted mismo. Vea http://code.google.com/p/android/issues/detail?id=2096 para el informe de error en esto. No parece que Google planea extender ListPreference para manejar cualquier cosa que no sea cadenas.

También: Deberá almacenar la preferencia como una cadena también. De lo contrario, su actividad de preferencias se bloqueará cuando se inicie e intentará leer un valor de cadena.

+0

Gracias. No me había encontrado con ese informe de error. –

6

Lo hice de una manera un poco más extrema.

Utilicé ListPreference e hice que mi array entryValues ​​contiene Strings que puedo convertir a entero con Integer.parseInt().

Luego, en PreferencesActivity, configuro OnPreferenceChangeListener para esta preferencia, y en el método onPreferenceChange() establezco una preferencia diferente a la versión entera; esta segunda es la que realmente uso en mi código. El primero está allí solo para la opción del usuario.

De esta forma no tengo que convertir una cadena en int cada vez que necesito verlo, solo lo hago cuando el usuario lo establece. Tal vez exagerado, pero funciona :)

0

Necesita crear un recurso xml y establecer su valor predeterminado a eso. Todo lo que ingrese en el archivo XML como un literal se trata como una cadena, por lo que ListPreference arrojará una excepción de puntero nulo cuando intente encontrar una cadena en una matriz de enteros.

0

Pero para mí, primero aparece un tipo de cadena por: Cadena numStr = prefs.getString ("clave", "-555"); a continuación: `

try { 
    int yourInt = Integer.parseInt(numStr); 
    if(yourInt != -555) 
    { 
     //do your stuff 
    } 
} 
catch(Exception e) 
{ 
    ... 
} 

`

Cuestiones relacionadas