MenuItem 未正确设置可见性

MenuItem not setting visibility properly

我得到了菜单项,然后尝试设置可见性,但菜单项始终显示。谁能看出我哪里出错了?

菜单项不为空,因此已分配,所以不是。

 MenuItem done = menu.findItem(R.id.action_done);
    //animate the list view
    if (isListEditing) {
        done.setVisible(true);
        menuItem.setTitle(this.getString(R.string.EditKey));
        isListEditing = false;
        adapter.endEdit();
    } else {
        done.setVisible(false);
        menuItem.setTitle(this.getString(R.string.DoneKey));
        isListEditing = true;
        adapter.makeEditable();
    }
    this.invalidateOptionsMenu();

我在此处获取菜单参考:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_test_results, menu);
    this.menu = menu;
    return true;
}

更新:

我的印象是您在进行编辑后必须使选项菜单无效。但这就是导致编辑无法通过的原因。

不需要

this.invalidateOptionsMenu();

把它取下来,它应该可以正常工作。

根据 docs,invalidateOptionsMenu() 所做的是:

Declare that the options menu has changed, so should be recreated. The onCreateOptionsMenu(Menu) method will be called the next time it needs to be displayed.

这意味着将再次调用 onCreateOptionsMenu,扩大您的原始菜单布局,从而放弃您之前对菜单项可见性的更改。

动态修改菜单内容的推荐方法是使用onPrepareOptionsMenu。所以每当你需要更新菜单项时,你可以调用invalidateOptionsMenu(),然后在onPrepareOptionsMenu中,你设置菜单项的可见性。