首页 > 解决方案 > onCreateOptionsMenu 永远不会被调用(工具栏膨胀)

问题描述

我的片段类:

Toolbar toolbar;

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    toolbar =  getView().findViewById(R.id.toolbar3);
    toolbar.inflateMenu(R.menu.menufragmentmain);
    setHasOptionsMenu(true); //i also tried putting this function in oncreate function
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Toast.makeText(getActivity(), "i never enter this function also" , Toast.LENGTH_LONG).show();
    super.onCreateOptionsMenu(menu,inflater);
    inflater.inflate(R.menu.menufragmentmain, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Toast.makeText(getActivity(), "i never enter this function" , Toast.LENGTH_LONG).show();
    //some switch cases.....
    return super.onOptionsItemSelected(item);
}

我有一个愚蠢的错误,我无法找到它。我的片段有一个简单的工具栏。在onViewCreated我用我的工具栏膨胀我的操作栏菜单。问题是永远不会调用函数onCreateOptionsMenu和“onOptionsItemSelected”。我不知道为什么。

我在具有相同问题的其他类似问题中检查的内容:

没有任何一点是无效的。我错过了什么。我需要检查其他东西吗?

标签: androidandroid-fragmentsandroid-actionbarandroid-toolbarlayout-inflater

解决方案


根据解释如何使用 Fragment 拥有的工具栏的Fragment 拥有的应用栏指南,您使用任何setHasOptionsMenu()onCreateOptionsMenu()onOptionsItemSelected()API - 这些仅用于活动拥有的应用栏。

相反,您将遵循使用API处理菜单点击事件的指南:Toolbar

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    toolbar =  getView().findViewById(R.id.toolbar3);
    toolbar.inflateMenu(R.menu.menufragmentmain);

    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(getActivity(), "onMenuItemClick called" , Toast.LENGTH_LONG).show();
            //some switch cases.....
            return true;
        }
    });
}

推荐阅读