某些设备上的菜单没有刷新

时间:2014-09-22 07:31:38

标签: android actionbarsherlock menuitem

我在某些设备上遇到奇怪的菜单行为问题。 我做的是根据应用程序状态显示/隐藏菜单项。 我正在使用Actionbarsherlock。 我的代码是:

private MenuItem saveMI;
private MenuItem postMI;
private MenuItem editMI;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    saveMI = menu.findItem(R.id.menu_save);
    postMI = menu.findItem(R.id.menu_post);
    editMI = menu.findItem(R.id.menu_edit);
    if (app != null) {
        app.setCurrentState();
    }
    return true;
}
void setGlobalState(State state, Object menuItem, String title) {
    getSupportActionBar().setTitle(title);
    boolean showSaveMenu = true;
    boolean showPostMenu = true;
    boolean showEditMenu = true;
    switch (state) {
    case EDITING:
        showSaveMenu = false;
        showPostMenu = true;
        showEditMenu = false;
        break;
    case VIEWING:
        showSaveMenu = false;
        showPostMenu = true;
        showEditMenu = true;
        break;
    case EDITING_NEEDTOSAVE:
        showSaveMenu = true;
        showPostMenu = true;
        showEditMenu = false;
        break;
    case IMG_EDITING:
    case POSTING:
    case NOT_POST:
    case NEW_POST:
    case CHOOSING_ACCS:
        showSaveMenu = false;
        showPostMenu = false;
        showEditMenu = false;
        break;
    }
    if (saveMI != null) {
        saveMI.setVisible(showSaveMenu);
    }
    if (postMI != null) {
        postMI.setVisible(showPostMenu);
    }
    if (editMI != null) {
        editMI.setVisible(showEditMenu);
    }
    invalidateOptionsMenu();
    supportInvalidateOptionsMenu();
}

实际上,它在纯Android上运行良好。测试了很多设备。 但是有一些设备,假设忽略所有菜单更改,并且无论我设置什么状态,菜单项都保持不可见。 目前,我在两台设备上看到了这一点:华为S7-701u平板电脑和索尼Xperia手机。 我担心,供应商用固件中的操作栏改变了一些东西...... 那么,你能帮助我在所有设备上获得正常的行为吗?

EDITED我提到过,如果我在应用程序启动时没有调用隐藏菜单项,它们会显示在操作栏中。但是我根本无法隐藏它们。因此,该设备上的动作栏似乎无法接收无效呼叫。 仍然困难,需要帮助。

1 个答案:

答案 0 :(得分:0)

如果某人有趣,我自己找到了解决方案。 我将所有代码从setGlobalState方法转移到onCreateOptionsMenu,并删除了菜单项的类字段 - 它有效。