在 main activity 中执行 setVisible(true) 时隐藏在片段中的 MenuItem 不可见

MenuItem hidden in fragment not visible when doing setVisible(true) in main activity

我已经在这个问题上卡住了很长一段时间了。在我的代码中,我有一个片段,我不想在其中显示搜索菜单​​项。为此,我在片段

中执行此操作

里面onCreate

    setHasOptionsMenu(true);

然后

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        this.menu = menu;
        MenuItem search = menu.findItem(R.id.action_search);
        search.setVisible(false);
    }

这完全符合预期并隐藏了项目。现在,当我返回时,主 activity 的 onBackPressed() 被调用,然后我执行此操作

@Override
public void onBackPressed() {

    // code skipped
    invalidateOptionsMenu();
} 

这调用了主activity里面的onCreateOptionsMenu,如下

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        item = menu.findItem(R.id.action_search);
        item.setVisible(true);

       //code skipped
}

调用了 onCreateOptionsMenu 函数,但不幸的是 menuItem 仍然隐藏,我看不到搜索菜单。

有人可以帮忙吗,可能是什么问题?提前致谢!!

方法 onCreateOptionsMenu 仅在创建 activity(或片段)时调用。使用 onPrepareOptionsMenu 设置菜单项的可见性。 invalidateOptionsMenu 调用 onPrepareOptionsMenu,而不是 onCreateOptionsMenu