2012-07-06 17 views
6

Solo CheckboxLas claves de referencia con un android: defaultValue = "true" se mostrarán en el código a continuación. Por lo tanto, no se muestran ninguna de las claves con defaultValue = "false". ¿Cómo obtengo una lista de todas las claves en mi archivo de preferencias?SharedPreferences.getAll() no tiene claves de preferencia que son falsas. ¿Cómo recuperar todas las llaves?

PreferenceManager.setDefaultValues(this,R.xml.settings,true); //readAgain=false is same result 
     SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this); 
     Map<String, ?> prefMap=prefs.getAll(); 
     for(String key:prefMap.keySet()) { 
      Log.d("preference key=",key); //only keys with true are shown 
     } 
    } 

De acuerdo con los documentos getAll() debe: "Recuperar todos los valores de las preferencias." Sin embargo, parece que solo obtiene las claves que tienen predeterminado = verdadero a menos que el usuario haya establecido la preferencia más adelante.

EDITAR: This is likely related to Android Bug: 6441, pero no me da una solución para obtener todas las claves.

+1

Si no tiene un valor por defecto y sin valor para el usuario, entonces no es en el compartida preferencias. si quieres todas las preferencias definidas, tal vez deberías repetir tu archivo xml de preferencias. – Ran

+0

@ Ran-> Estas preferencias tienen android: defaultValue = false, por lo que es un valor. – Fraggle

Respuesta

0

Se puede acceder a todas las preferencias con lo siguiente (lo uso para activar/desactivar todas las preferencias):

final ListAdapter adapter = getPreferenceScreen().getRootAdapter(); 
    for (int i = 0; i < adapter.getCount(); i++) { 
     Object object = adapter.getItem(i); 
     if(object instanceof Preference){ 
      ((Preference)object).setEnabled(state); // state -> my own variable 
     } 
    } 
Cuestiones relacionadas