2012-07-06 8 views
6

Tylko klucze CheckboxPreference z Androidem: defaultValue = "true" będą wyświetlane w poniższym kodzie. Więc żaden z kluczy z defaultValue = "false" nie są wyświetlane. Jak mogę uzyskać listę wszystkich kluczy w moim pliku preferencji?SharedPreferences.getAll() nie ma kluczy preferencji, które są fałszywe. Jak odzyskać wszystkie klucze?

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 
     } 
    } 

Zgodnie z docs getAll() powinna: "Pobierz wszystkie wartości z preferencji." Jednak wydaje się, że klucze mają wartość default = true, chyba że preferencja została ustawiona później przez użytkownika.

EDYTOWANIE: This is likely related to Android Bug: 6441, ale nie daje mi obejścia, aby uzyskać wszystkie klucze.

+1

Jeśli nie ma wartości domyślnej, a nie wartość firmy to nie jest we wspólnym preferencje. jeśli chcesz wszystkie zdefiniowane preferencje, może powinieneś powtórzyć swój plik preferencji xml. – Ran

+0

@ Ran-> Te preferencje mają android: defaultValue = false, więc jest to wartość. – Fraggle

Odpowiedz

0

można uzyskać dostęp do wszystkich ustawień z następujących (używam go włączyć/wyłączyć wszystkie preferencje):

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 
     } 
    }