【问题标题】:Preserve MenuItem checkbox status on rotate events在旋转事件上保留 MenuItem 复选框状态
【发布时间】:2013-02-13 23:21:14
【问题描述】:

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

编辑: 这些是我正在使用的复选框,我没有手动设置任何图标。

EDIT2:

好的,看起来android:configChanges="orientation|screenSize" 可以解决问题,但它停止使用横向模式的布局,而是使用默认布局。 而没有“screenSize”的android:configChanges="orientation" 什么也不做。

编辑3:

无耻的自动碰撞。我还是被困住了。 :(

【问题讨论】:

    标签: android checkbox sharedpreferences menuitem


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗯...这部分有所帮助,请查看页面底部的新编辑。
    【解决方案2】:

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

    How to save state during orientation change in Android

    Saving Activity state in Android

    【讨论】:

    • 我已经访问过这些链接,但效果不佳。 :(另外,我已经更好地解释了我的问题。
    • @ecem 重点是您不应该必须手动保存视图状态。将单个 CheckBox 放入布局中并使用它创建一个空活动,状态将在旋转时保留,甚至按下 Home 按钮并从“最近”中选择。
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2020-06-11
    • 2016-10-13
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多