Korzystanie z preferencji wspólnych w każdej aktywności

Chcę, aby moje preferencje aplikacji były dostępne przy każdej czynności. Nie chcę pobierać wszystkich preferencji wspólnych w każdym działaniu. ale zamiast tego pobierz SharedPreferences raz i uzyskaj globalny obiekt, który ma wartości dla wszystkich tych preferencji, na przykład if (AppSettings.isSoundOn()) {// do stuff} i miej ten obiekt dostępny wszędzie bez „jeśli” i „ale”.

Próbowałem użyć klas statycznych, ale nie można uzyskać preferencji wspólnych z klasy statycznej. Wygląda również na to, że klasa, w której otrzymujesz SharedPreferences, musi rozszerzyć Activity, albo spowoduje błąd.

Jestem pewien, że zwykle jest to głupio proste, ponieważ jest to podstawowa funkcjonalność aplikacji, ale żadna z książek o programowaniu na Androida, które mam, nie opisuje, jak radzić sobie z preferencjami aplikacji, ani samouczków, które mogłem znaleźć tylko okładki i uzyskanie SharedPreferences, co jest proste, ale musisz to robić w każdej czynności.


person L84    schedule 08.09.2013    source źródło
comment
Rozszerz klasę Application. stackoverflow.com/questions/4051875/   -  person Simon    schedule 08.09.2013


Odpowiedzi (1)


Utwórz klasę taką jak MyApplication i rozszerzy od android.app.Application. Tam możesz uzyskać dostęp do wspólnych preferencji.

W każdym działaniu możesz uzyskać Application, używając MyApplication app = (MyApplication)this.getApplication();

W MyApplication umieść metodę publiczną, która pobiera Sharedpreference i taką, która ją przechowuje.

person dumazy    schedule 08.09.2013
comment
Ok, to działa, ale co robi MyApplication app = (MyApplication)this.getApplication();? (w szczególności część (MyApplication)this.getApplication(). Czy nie oznaczałoby to również, że za każdym razem, gdy chcę uzyskać dostęp do ustawień, onCreate() klasy MyApplication musiałby działać i robić to, co robi (w tym przypadku odczytywane z SharedPreferences)? to marnotrawstwo tylko po to, aby uzyskać kilka wartości logicznych? - person L84; 08.09.2013
comment
nie, onCreate() MyApplication uruchamia się tylko raz, gdy aplikacja jest uruchamiana po raz pierwszy, dopóki nie zostanie zniszczona (użytkownik usunie ją z ostatnich aplikacji, zatrzyma w ustawieniach aplikacji lub system zatrzyma ją, ponieważ potrzebuje pamięci) . getApplication() zawsze udostępnia klasę Application Twojej aplikacji. Musisz przesłać go do MyApplication, aby użyć metod, które w nim umieściłeś - person dumazy; 08.09.2013