0

我的菜单中有一个来自 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:

无耻的汽车碰撞。我还是被困住了。:(

4

2 回答 2

0

看起来像一个常见的方向变化 - 对我来说状态保存问题。这个问题已经有了很好的解决方案,例如以下链接中提供的解决方案:

如何在Android中的方向更改期间保存状态

在 Android 中保存 Activity 状态

于 2013-02-13T23:36:13.753 回答
0

根据我的经验,在我的清单文件中包含以下内容会保留状态。

" android:configChanges="orientation|screenSize"/>

稍后看到您的编辑。可能这是你做错了什么:

MenuItem 的选中状态未通过其图标正确显示

于 2013-02-13T23:45:01.433 回答