Tengo una actividad de preferencias que utiliza una lista de preferencias según lo definido por mi archivo XML. ¿Cómo establecería el resumen de la actividad de la lista en el valor seleccionado?
¡Gracias!
La forma más sencilla de hacer esto es que Android lo haga por usted. Suponiendo que desea que el resumen coincida con el valor seleccionado, simplemente puede configurar el resumen del ListPreference
a"%s"
usando XML o el setSummary
método en Java. Por ejemplo:
<ListPreference
android:key="pref_list"
android:title="A list of preferences"
android:summary="%s"
android:entries="@array/pref_list_entries"
android:entryValues="@array/pref_list_entries_values"
android:defaultValue="0" />
Android reemplazará %s
con el valor de cadena actual de la preferencia, como se muestra en elListPreference
selector de. El resumen de la lista también se configurará correctamente cuando ingrese a la actividad; no es necesario que escriba ningún código especial para configurarla inicialmente.
Esto también funciona con AndroidX ListPreference
.
Pasé mucho demasiado tiempo limpiando con SharedPreferences
los oyentes antes de descubrir esto.
"%s"
? En mis pruebas,"%s"
no funciona con Gingerbread y versiones anteriores.androidx
.Puede utilizar
OnPreferenceChangeListener
para cambiar dinámicamente el resumen. El problema es que obtiene el valor seleccionado (deandroid:entryValues
), no el título (android:entries
). En el siguiente código que utilicétoString()
, pero la solución adecuada es encontrar el título del valor. De todos modos, la idea funciona:fuente
También quería lograr algo similar, pero el problema con https://stackoverflow.com/a/8155029/592025 es que muestra el valor de mi preferencia (como 1, 2 3, etc.). Quiero mostrar la entrada (cadena legible por humanos) correspondiente al valor seleccionado.
Así que lo cambié de esta manera y funciona como lo necesito.
El truco es usar en
getEntry()
lugar degetValue()
y una vez que se cambia el valor, establecer el valor explícitamente y volver a leer la entrada.fuente
Creo que lo que está buscando es mucho más simple de lo que puede pensar, agregue la siguiente línea de código a su
Preference
artículo:Entonces se verá algo como esto:
fuente
Primero obtenga una referencia a ListPreference en su onCreate. Puede usar findPreference (). Por ejemplo:
Luego, cuando cargue la Actividad por primera vez y siempre que se cambie el valor de las preferencias, use el método que desee para obtener el valor de ListPreference y configure el resumen con:
fuente
Este es el código que estoy usando, no llama a setValue manualmente, ya que creo que esto ya está hecho en una etapa posterior.
Aquí hay un ejemplo:
fuente
Esto es exactamente lo que hice y funciona muy bien. En onSharedPreferenceChangeListener , simplemente verifico la clave de lo que se está cambiando y luego, para ListPreferences, la convierto nuevamente a la lectura humana (entrada en lugar de entryValue) con las declaraciones if. Bastante simple.
diseño xml
matriz xml
fuente
Aquí hay una versión ampliada de la respuesta de midhunhk que también aborda la útil cadena "android: summary"
Y, para que quede claro, android: summary se elimina del xml relacionado.
fuente
Y aquí hay una forma de lidiar con la actualización resumida de la preferencia de tono de llamada después de una selección de usuario.
fuente
Tiene un método bindPreferenceSummaryToValue en su PreferenceActivity,
puede agregar fácilmente el resumen a la lista haciendo así:
En su método OnCreate, llama a la función de vinculación de esta manera:
Puede agregar fácilmente otros resúmenes de la misma manera:
fuente
en onCreatePreferences haz esto:
fuente