write sirve shared_prefs que para android android-preferences

sirve - ¿Cómo obtener un ListPreference de Android definido en Xml cuyos valores son enteros?



shared preferences write (5)

De hecho como puedes leer en los documentos:

http://developer.android.com/reference/android/preference/ListPreference.html#getValue()

El método para obtener un valor ListPreference es:

public String getValue ()

Así que tienes una cadena. No es un gran problema, pero podría ser más bonito admitir enteros.

¿Es posible definir un ListPreference en Xml y recuperar el valor de SharedPreferences usando getInt? Aquí está mi xml:

<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 val = sharedPrefs.getInt (key, defaultValue).

En este momento tengo que usar getString y analizar el resultado.


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


Hice esto de una manera un poco más extrema.

Utilicé ListPreference e hice que la matriz entryValues ​​contenga cadenas que puedo convertir en enteros con Integer.parseInt ().

Luego, en mi PreferencesActivity, configuro un 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á ahí solo para la opción de usuario.

De esta manera no tengo que convertir un String a int cada vez que necesito verlo, solo lo hago cuando el usuario lo configura. Tal vez una exageración, pero funciona :)


Mi entendimiento es que ListPreference solo puede funcionar con matrices de cadenas. Tendrás que usar getString () y convertirte a un entero. Consulte http://code.google.com/p/android/issues/detail?id=2096 para obtener un informe de errores al respecto. Parece que Google no planea extender ListPreference para manejar nada más que cadenas.

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


Pero para mí, primero obtienes un tipo de cadena por: String numStr = prefs.getString ("key", "-555"); entonces:

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

`