2011-03-09 19 views
5

Mam PreferencesActivity, który pokazuje preferences.xml z polami wyboru.Android Uzyskaj klucze od preferences.xml

preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory android:title="Keywords"> 
    <CheckBoxPreference android:key="Essen" 
         android:title="Essen" 
         android:selectable="true" 
         android:enabled="true" 
         android:persistent="false"> 
    </CheckBoxPreference> 
    <CheckBoxPreference android:key="Kleidung" 
         android:title="Kleidung" 
         android:selectable="true" 
         android:enabled="true" 
         android:persistent="false"> 
    </CheckBoxPreference> 
</PreferenceCategory> 
</PreferenceScreen> 

PreferencesActivity:

public class PreferencesViewController extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

Teraz w innym ListActivity Chcę pokazać wszystkie klucze/Tytuły z zaznaczonych pól wyboru.

próbie uzyskania dostępu do preferencji z

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

lub

SharedPreferences prefs = getSharedPreferences("mypackage_preferences", 0); 

Ale zarówno naprawdę nie działa.

Kiedy zadzwonić prefs.getAll().size() wynik jest 0.

mogę uzyskać dostęp do kluczy/Tytuł z getPreferenceScreen().getPreference(i).… ale to nie działa z innego Activity, tylko z PreferenceActivity.

Czy ktoś ma rozwiązanie, jak uzyskać tę pracę?

Odpowiedz

0

używam

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

A potem mogę uzyskać dostęp do ustawień, np poprzez prefs.get...()prefs.getString(key). Próbowałeś tego?

Edit: Tylko sprawdzone - prefs.getAll() działa zgodnie z oczekiwaniami i zwraca Map ze wszystkimi preferencjami.

+0

Już próbowałem. – liquid

+0

Problem polega na tym, że chcę zaktualizować te preferencje z Internetu/serwera. Więc nie znam kluczy do każdego pola wyboru. Preferencje powinny być pokazane w działaniu/widoku, użytkownik może zaznaczyć/odznaczyć je. Muszę przeczytać sprawdzone preferencje, a preferencje powinny być aktualizowane przez serwer ... może PreferenceActivity nie jest właściwym rozwiązaniem ?! : -/ – liquid

0

Należy użyć

SharedPreferences prefs = referenceManager.getDefaultSharedPreferences(this); 

Preferencje może być pusta, jeśli nigdy nie ustawić je poprzez PreferencesActivity. Również myślę, że Twoja ListActivity musi być w tym samym pakiecie co PreferencesActivity.

3

Do wykonania tego celu nie jest potrzebna PreferenceActivity.

Aby uzyskać dostęp do ustawień, które są używane w PreferenceActivity, należy użyć

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

Jeśli lista danych pochodzi z serwera, niż można użyć ListActivity/ExpandableListActivity/żadnej aktywności niestandardową wizualizację to, ale w ten sposób musisz napisać programy obsługi, które zmieniają preferencje.

Wspólna sposób to zrobić byłoby:

private void saveStringPreference(final String key, final String value) 
{ 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 

Jeśli trzeba, należy utworzyć podobne owijarki do czynienia z int, boolean itp wartości.

+1

Dziękuję. Szukałem tej odpowiedzi przez około godzinę. Miałem preferences.xml i preferences.java, ale chciałem użyć innego ekranu do ustawienia wartości. Dzięki jeszcze raz. – EGHDK

+0

Dlaczego 'getBaseContext()'? –

+0

Chyba nigdy się nie dowiemy – Denny

1

Miałem również ten problem. Jest to niestety klasyczny RTFM.Należy umieścić linię poniżej w sposobie Twojego główną działalność za onCreate():

PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 

Ten informacji można znaleźć w rozdziale „Ustawianie wartości domyślnych” od http://developer.android.com/guide/topics/ui/settings.html