在主要活动

时间:2016-10-28 20:45:22

标签: android android-fragments android-menu

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

中做了这个

内部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);
    }

这与预期完全一样,并隐藏了该项目。现在,当我回来按下主要活动的o nBackPressed()时,我会这样做

@Override
public void onBackPressed() {

    // code skipped
    invalidateOptionsMenu();
} 

这会调用主要活动中的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仍然隐藏,我无法看到搜索菜单。

有人可以帮忙,可能是什么问题?在此先感谢!!

1 个答案:

答案 0 :(得分:1)

方法onCreateOptionsMenu仅在创建活动(或片段)时调用。使用onPrepareOptionsMenu设置菜单项的可见性。 invalidateOptionsMenu来电onPrepareOptionsMenu,而非onCreateOptionsMenu