2013-02-13 86 views
0

我有一个MenuItem中的MenuItem,它有一个复选框,但当我旋转设备时,复选框仍处于活动状态,但标签右侧的图标未选中。在旋转事件中保留MenuItem复选框状态

我想实现的是显示旋转设备后再次检查该框。

到目前为止,我一直试图用SharedPreferences,flags,将“菜单”(从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); 
} 

编辑: 那些是什么样,我使用,我没有手动设置任何图标复选框

enter image description hereenter image description here

编辑2:

好吧,看起来像android:configChanges="orientation|screenSize"是伎俩,但它停止使用lay出于横向模式,并使用defalut而不是。没有“screenSize”的 和android:configChanges="orientation"什么都不做。

编辑3:

无耻的汽车颠簸。我仍然卡住。 :(

回答

0

从我所经历的,在我的清单文件中保留以下状态:

“android:configChanges =”orientation | screenSize“/>

稍后再查看您的编辑。可能这是你在做什么错:

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

+0

嗯......这部分帮助,看看页面底部的新编辑。 – Deses 2013-02-14 00:16:45

0

看起来像一个共同的方向变化 - 状态保存问题我已经有诸如以下链接提供者对于这个问题的大型解决方案,:

How to save state during orientation change in Android

Saving Activity state in Android

+0

我已经去过这些链接,并没有做多好。 :(另外,我已经解释过我的问题更好了 – Deses 2013-02-13 23:42:57

+0

@ecem关键是你**不应该**必须手动保存**视图状态**。将一个CheckBox放在布局中并创建一个空活动有了它,状态将被保留在不同的旋转状态,甚至是主页按钮按下并从最近选择。 – TWiStErRob 2014-10-21 12:36:54