Использование общих настроек в каждом действии

Я хочу, чтобы настройки моего приложения были доступны в каждом действии. Я не хочу получать все SharedPreferences в каждом действии. но вместо этого получите SharedPreferences один раз и получите глобальный объект со значениями для всех этих предпочтений, например if (AppSettings.isSoundOn()) {// do stuff}, и этот объект будет доступен везде без всяких «если» и «но».

Я пытался использовать статические классы, но вы не можете получить общие настройки из статического класса. Также похоже, что класс, в котором вы получаете SharedPreferences, должен расширять Activity, иначе он выдает ошибку.

Я уверен, что это обычно делается до глупости простым способом, поскольку это базовая функциональность приложения, но ни одна из книг по разработке Android, которые у меня есть, на самом деле не описывает, как работать с общими настройками приложения, и любые учебные пособия, которые я мог найти, просто охватывают настройки и получить SharedPreferences, что просто, но вы должны делать это в каждом действии.


person L84    schedule 08.09.2013    source источник
comment
Расширьте класс Application. stackoverflow.com/questions/4051875/   -  person Simon    schedule 08.09.2013


Ответы (1)


Создайте класс, подобный MyApplication, и расширяйте его от android.app.Application. Там вы можете получить доступ к общим настройкам.

В каждом действии вы можете получить Application, используя MyApplication app = (MyApplication)this.getApplication();

В MyApplication поместите общедоступный метод, который получает Sharedpreference и тот, который его сохраняет.

person dumazy    schedule 08.09.2013
comment
Хорошо, это работает, но что делает MyApplication app = (MyApplication)this.getApplication();? (в частности, часть (MyApplication)this.getApplication(). Кроме того, не означает ли это, что каждый раз, когда я хочу получить доступ к настройкам, onCreate() класса MyApplication должен запускаться и делать все, что он делает (в данном случае читать из SharedPreferences)? что расточительно просто получить несколько логических значений? - person L84; 08.09.2013
comment
нет, onCreate() MyApplication запускается только один раз, когда приложение запускается в первый раз, пока оно не будет уничтожено (пользователь удалит его из последних приложений, остановит в настройках приложения или система остановит его, потому что ему нужна память) . getApplication() всегда дает вам класс приложения вашего приложения. Вы должны привести его к MyApplication, чтобы использовать методы, которые вы в него вложили. - person dumazy; 08.09.2013