2013-03-06 14 views
5

Istnieje kilka funkcji w mojej aplikacji, które wymagają Androida w wersji 4.2+. Tak więc w mojej głównej działalności będę musiał sprawdzić dostępne funkcje systemu operacyjnego i zmodyfikować (włączyć/wyłączyć) elementy preferencji, które są zdefiniowane w moim PreferenceActivity.Jak zmienić stan elementu preferencji spoza PreferenceActivity?

Poniższy kod jest nieosiągalny spoza PreferenceActivity

ListPreference prefReport = (ListPreference)getPreferenceScreen().findPreference("pref_report"); 
prefDspProfile.setValue("0"); 

Więc moje pytanie brzmi, jak zmodyfikować preferencje pozycji spoza PreferenceActivity.

Odpowiedz

2

Jeśli używasz PreferenceAcitivity niejawnie, używasz pliku SharedPreference. Tak więc, poza ustawieniem preferencji użytkownika, można uzyskać dostęp do pliku SharedPrefence i go zmienić. Wkrótce te zmiany zostaną odzwierciedlone na Twojej PreferenceActivity.

Potrzebujesz Kontekst, aby uzyskać dostęp do SharedPreference. Czekamy na przykład na onCreate metoda innej simpleAcitivity.

UPDATE: Stosując to podejście nie jesteś w stanie włączyć/wyłączyć przedmiotów. Można zmienić ich wartości lub usunąć je

@Override 
protected void onCreate(Bundle state){ 
    super.onCreate(state); 

    // Restore preferences 
    SharedPreferences settings = getPreferences(MODE); 
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     //change your setting here 
     // We need an Editor object to make preference changes. 
     // All objects are from android.context.Context 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("silentMode", mSilentMode); 

     // Commit the edits! 
     editor.commit(); 
    } 

} 

inny sposób, a on moim zdaniem lepiej i łatwiej jest zapewnienie alternatywnych zasób. Możesz udostępnić wiele plików xml, które definiują ustawienia Twojej aplikacji zgodnie z poziomem interfejsu API Androida: przy użyciu kwalifikatora zasobów. Na przykład: v2, v17.

res-v4 
    setting.xml 

res-v17 
    setting.xml -> This file can include specific Jelly Beans configs 
+0

dotyczące Twojego pierwszego rozwiązania, elementy nie mogą być włączone/wyłączone, więc nie wiem, czy są one zgodne z tą wersją Androida, czy nie. Twoje drugie rozwiązanie jest moją odpowiedzią. Szczęśliwe kodowanie Bruno Mateus –

+0

Nie ma za co. –

Powiązane problemy