2013-02-13 3 views
0

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

Что я хочу достичь, так это показать, что коробка снова проверена после поворота устройства.

До сих пор я пытался исправить это с помощью SharedPreferences, flags, сохраняя «Menu» (from onCreateOptionsMenu) в переменной и искал id, onPrepareOptionsMenu, но ничего не делает то, что я хочу.

Что я сейчас делаю, это сохранить флаг состояния MenuItem на «onOptionsItemSelected», а затем «onPrepareOptionsMenu» проверить значение флага и установить проверку ... Но это вызывает еще большую проблему.

У меня нет понятия, что делать. :(

Код:

private boolean lockFlag; 

... 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    this.menu = menu; 

    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 

    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_lock: 
     if (item.isChecked()) { 
      item.setChecked(false); 
      lockFlag = false; 
     } else { 
      item.setChecked(true); 
      lockFlag = true; 
     } 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    if (lockFlag) { 
     menu.findItem(R.id.menu_lock).setChecked(true); 
    } else { 
     menu.findItem(R.id.menu_lock).setChecked(false); 
    } 

    return true; 
} 

private void savePrefs() { 
    getSharedPreferences("LOCKBARS", MODE_PRIVATE).edit().putBoolean("lockbars", lockFlag).commit(); 
} 

private void loadPrefs() { 
    this.lockFlag = getSharedPreferences("LOCKBARS", MODE_PRIVATE).getBoolean("lockbars", false); 
} 

EDIT:. Это вид флажка, который я использую, я не устанавливать вручную любой значок

enter image description hereenter image description here

EDIT2:

ОК, похоже, что android:configChanges="orientation|screenSize" выполняет трюк, но останавливается, используя для ландшафтного режима и вместо этого использует defalut. И android:configChanges="orientation" без "screenSize" ничего не делает.

Edit3:

Shameless авто шишка. Я все еще застрял. :(

ответ

0

Из того, что я испытал, имеющий следующий в моем файле манифеста сохраняет состояние

«андроид: configChanges =». ориентация | Размер экрана "/>

Видел ваши изменения позже. Может быть, это то, что вы делаете неправильно:

MenuItem's checked state is not shown correctly by its icon

+0

Хм ... Это частично помогло, посмотрите на новое редактирование внизу страницы. – Deses

0

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

How to save state during orientation change in Android

Saving Activity state in Android

.
+0

Я уже по этим ссылкам, а не делать много хорошего. :(Кроме того, я лучше объяснил свою проблему. – Deses

+0

@ecem - это то, что вы ** не должны ** сохранять ** состояние просмотра ** вручную. Поместите один CheckBox в макет и создайте пустую активность с ним, состояние будет сохранено через поворот и даже нажатие кнопки «Домой» и выбор из «Редентов». – TWiStErRob

 Смежные вопросы

  • Нет связанных вопросов^_^