Obtener clave, no valor, de la selección ListPreference – ¿Posible?
Obtener el valor del elemento actualmente seleccionado en ListPreference
es sencillo:
String selected = sharedPrefs.getString( getString(R.string.list_preference_array), "default string" );
Pero ahora necesito conseguir la llave del artículo seleccionado actualmente, en lugar de otro. es posible?
- Android: ¿Dónde se debe definir / registrar un OnSharedPreferenceChangeListener?
- Utilizar listpreference y obtener la clave funciona, pero no hay botón ok
- ¿Cómo agregar un "oyente de clic largo" a una preferencia?
- ¿Cómo acceder a widgets en una DialogPreference personalizada con un diseño inflado?
- ¿Cómo usar el Porcentaje para el diseño de Android?
Para aclarar, una definición típica ListPreference en el archivo XML tiene los siguientes componentes:
<ListPreference android:key="@string/list_preference_array" android:title="Title of ENTIRE list (not seen by user?)" android:summary="this is what the user sees in small fonts" android:defaultValue="just in case" android:entries="@array/user_friendly_labels" android:entryValues="@array/code_meaningful_strings" android:dialogTitle="User Prompt(big font)" android:showDefault="true" android:showSilent="true" />
Lo que sharedPrefs.getString()
devuelve es la selección actual de android: entryValues . Lo que me interesa obtener es la selección actual de android: entradas . Lo llamé erróneamente "clave", pero realmente es una "etiqueta correspondiente", que debe ser diferente al contenido real.
- Validar las preferencias. Androide
- No se puede obtener el botón de configuración para mostrar el fondo de pantalla en vivo
- ¿Cómo establecer el valor RingtonePreference del código?
- Las preferencias dependientes muestran una fuente de color incorrecta cuando está deshabilitada
- ¿Cómo detectar si se hicieron cambios en las preferencias?
- ¿Por qué no Fragment retener el estado cuando se gira la pantalla?
- Cómo cambiar el estilo de texto en el fragmento de preferencia
- Eliminar la pantalla de preferencias actuales y volver a la pantalla de preferencias principales
Un poco de una suposición:
int index = mylistpreference.findIndexOfValue(selected) // <- selected taken from your code above String entry = mylistpreference.getEntries()[index];
Solo usa:
mylistpreference.getEntry()
Para obtener mylistpreference uso:
mylistpreference= (ListPreference) getPreferenceScreen().findPreference(key);
Key es la clave android: definida en preference.xml dentro de la etiqueta <ListPreference>.
La función se define como
SharedPreferences.getString(String key, String defaultValue);
Así que en su código de ejemplo, getString(R.string.select_string)
devolverá la clave.
Cuando agrega SharedPreference
, debe especificar la clave, por lo que la clave sería la misma que utilizó para establecer el valor.
Editar:
Utilizando SharedPreferences.getString()
con la clave ListPreference como la clave devolverá el valor que el usuario seleccionó de la lista. No es necesario crear claves para cada opción en la matriz ListPreference y estas claves no se crean automáticamente. Utilice las sentencias de caso que se correlacionan con los valores de entryValues
de entryValues
.
@shai Su método se retrasa hasta la última entrada seleccionada
listPreference.getEntry()
Más bien el método de @Erik funciona bien
int index = listPreference.findIndexOfValue((String) value) String entry = listpreference.getEntries()[index];
- ¿Por qué se filtran hilos en Android?
- Android.database.sqlite.SQLiteCantOpenDatabaseException: error desconocido (código 14): No se pudo abrir el problema de la base de datos