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?

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.

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]; 
  • FindViewById devuelve nulo para el diseño de preferencias
  • SharedPreferences.onSharedPreferenceChangeListener no se llama constantemente
  • Cuándo usar CheckBox y cuando cambie
  • Extraño error utilizando onCreateView en PreferenceFragment al llamar addPreferencesFromResource de onCreate
  • Error: Error: Los tipos de cadenas no están permitidos (en 'entradas' con valor 'array / list')
  • Preferencias personalizadasCategorías
  • Cómo cargar la misma preferencia de pantalla en el detalle PreferenceFragment
  • ¿Cómo almacenar datos para un widget?
  • SharedPreferences reset: El tamaño del mapa no es 0 después de restablecer
  • Método de findPreference () no obsoleto? - Android
  • SetInputType en EditTextPreference
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.