2015-05-04 5 views
0

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

Когда действие происходит, я изменяю заголовок элемента с «Включить службу» на «Отключить службу» и соответственно устанавливая логическое значение.

вопрос начинается, когда приложение закрывается, а затем класс перезагружается. Логическое значение будет сброшено до начального значения.

То, что я хотел бы знать:

  1. , что является оптимальным для использования имеющих одно меню пункт, который делает различные действия в зависимости от его статуса.
  2. Какова наилучшая практика сохранения логического значения в его последнем состоянии? (Общие предпочтения?)
+0

Да, вы сохраняете 'boolean' в' предпочтения' и каждый раз проверяете значение и обновляете его. – Yurets

+0

Вы должны использовать Shared Prefs. –

+0

вместо кнопки смены заголовка, используйте переключатель «Awsome Service state ON/OFF» –

ответ

0

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

Используя один пункт меню, вы можете обрабатывать два действия «Включить службу» и «Отключить службу» на основе значения, получаемого из общих настроек.

+0

Спасибо всем, что я в конечном итоге делаю, это использовать общий префикс для хранения логического значения, одна вещь, которая была сложной, заключалась в том, что когда класс перезагружается, и заголовок, настроенный в файле xml, также загружается и не описывает реальное состояние. поэтому я использовал onprepareoptionmenu, чтобы установить заголовок на основе логического значения, существующего в общей pref. надеюсь, что это поможет кому-то еще " – user2145673

0

1.) Держите его в том же месте с разными значками/именами, в то же время различаясь друг от друга. например (Вкл./Выкл.) Имя/значок.

2.) Использование общих привилегий было бы способом, так как вы только сохраняете примитивное значение. Это быстрее, чем использование sqlite.

0

я сделать что-то вроде этого Когда вы загружаете вашу активность ..

SharedPreferences sharedPreferences; 
static int currentAction; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setting); 
    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyAction", Context.MODE_PRIVATE); 
    if (sharedPreferences.getInt("Action", 0) == 0) { // 0 for Enable Service 
     // set menu as Enable 
     currentAction = 0; 
    } else { // 1 for Disable service 
     // set menu as Disable 
     currentAction = 1; 
    } 

} 

и при нажатии на кнопку меню Пункт затем ..

if (currentAction == 0) { 
     //Do Action for Enable and change Action 
     currentAction = 1; 
    } else { 
     //Do Action for Disable and change Action 
     currentAction = 1; 
    } 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putInt("Action", currentAction); 
    editor.commit(); 
    } 

Надежда свою помощь ... !!