在片段中使用onPrepareOptionsMenu代替onCreateOptionsMenu

我在ActionBar设置了一些片段菜单项时遇到了问题,我找到了一种方法来解决它,但我不明白它为什么起作用。

我想在onCreateOptionsMenu方法中的菜单xml文件中onCreateOptionsMenu它后立即更改菜单项中的可见性。 该代码似乎工作正常,但没有明显的影响。 我解决了在onCreateOptionsMenu方法中增加菜单的问题,但改变了onPrepareOptionsMenu方法中的可见性。

我想知道的是为什么在onCreateOptionsMenu中更改可见性不起作用。

我可以在onPrepareOptionsMenu中做什么,我无法在onCreateOptionsMenu做什么?

这里有什么模式可循?

谢谢!

以下是相关的代码,以防万一:

public class MyFragment extends Fragment {

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.my_menu, menu);

        // This does not work, compiles and runs fine, but has no visible effect
        MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
        someMenuItem.setVisible(false);
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);

        // This does work
        MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
        someMenuItem.setVisible(false);
    }
}

你应该调用super.onCreateOptionsMenu(menu, inflater); 创建菜单之后,而不是之前。 这会在层次结构和其他片段中发送菜单,或者活动可能需要自行添加项目。

该活动负责显示和管理菜单,因此如果在将可见性更改为活动后更改可视性,则不会发生任何事情。

现在,当你调用super.onPrepareOptionsMenu(menu); 它会“准备”它的菜单,但它现在将考虑您在onCreateOptionsMenu所做的更改。


可能是代码应该返回true来使菜单可见,这意味着你应该把return true; 语句onCreateOptionsMenu()onPrepareOptionsMenu()

希望这可以帮助。


我使用onPrepareOptionsMenu更新菜单上的哪些项目应该处于活动状态,哪些项目应该变灰/取消,具体取决于活动的当前状态。 使用菜单项的setVisible方法来控制当前是否显示在菜单上。

链接地址: http://www.djcxy.com/p/10965.html

上一篇: Using onPrepareOptionsMenu instead of onCreateOptionsMenu in Fragment

下一篇: OpenID server/provider for Django