MenuItem无法正确设置可见性

时间:2015-08-04 18:57:13

标签: android menu menuitem

我得到菜单项,然后我尝试设置可见性,但始终显示菜单项。谁能看到我犯错误的地方?

菜单项不为空,因此分配的不是它。

 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;
}

更新

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

2 个答案:

答案 0 :(得分:2)

根据docs,invalidateOptionsMenu()的作用是:

  

声明选项菜单已更改,因此应重新创建。 onCreateOptionsMenu(Menu)方法将在下次需要显示时调用。

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

动态修改菜单内容的推荐方法是使用onPrepareOptionsMenu。因此,无论何时需要更新菜单项,都可以调用invalidateOptionsMenu(),然后在onPrepareOptionsMenu中设置菜单项可见性。

答案 1 :(得分:0)

没有必要

this.invalidateOptionsMenu();

取消它,它应该可以正常工作。