我的菜单中有一个来自 SherlockActionBar 的 MenuItem,它有一个复选框,但是当我旋转设备时,该复选框仍然处于活动状态,但标签右侧的图标未选中。
我想要实现的是在旋转设备后再次显示该框。
到目前为止,我一直在尝试使用 SharedPreferences、标志、将“菜单”(来自 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);
}
编辑:这些是我正在使用的复选框,我没有手动设置任何图标。
编辑2:
好的,看起来这样就android:configChanges="orientation|screenSize"
可以了,但是它停止使用横向模式的布局,而是使用默认的布局。android:configChanges="orientation"
没有“screenSize”,什么也做不了。
编辑3:
无耻的汽车碰撞。我还是被困住了。:(