我在某些设备上遇到奇怪的菜单行为问题。 我做的是根据应用程序状态显示/隐藏菜单项。 我正在使用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我提到过,如果我在应用程序启动时没有调用隐藏菜单项,它们会显示在操作栏中。但是我根本无法隐藏它们。因此,该设备上的动作栏似乎无法接收无效呼叫。 仍然困难,需要帮助。
答案 0 :(得分:0)
如果某人有趣,我自己找到了解决方案。 我将所有代码从setGlobalState方法转移到onCreateOptionsMenu,并删除了菜单项的类字段 - 它有效。