Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnCreateOptions菜单从未调用(工具栏充气)_Android_Android Fragments_Android Actionbar_Android Toolbar_Layout Inflater - Fatal编程技术网

Android OnCreateOptions菜单从未调用(工具栏充气)

Android OnCreateOptions菜单从未调用(工具栏充气),android,android-fragments,android-actionbar,android-toolbar,layout-inflater,Android,Android Fragments,Android Actionbar,Android Toolbar,Layout Inflater,我的片段类: 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 al

我的片段类:

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
中,我使用工具栏将操作栏菜单充气。 问题是永远不会调用函数
onCreateOptions菜单
和“onOptions ItemSelected”。我不知道为什么

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

  • 我检查了我的主要活动是否有
    onCreateOptions菜单
    或“onOptions ItemSelected”。没有
  • 检查我的样式类是否没有:
    android:theme=“@android:style/theme.Black.NoTitleBar
没有一点是不可靠的。我遗漏了什么。我需要检查其他东西吗?

根据说明如何使用片段拥有的工具栏的,您不使用任何
设置选项菜单()
onCreateOptions菜单()
,或
onOptionItemSelected())
API-这些API仅用于活动拥有的应用程序栏

相反,您可以使用
工具栏
API遵循以下步骤:

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;
        }
    });
}
根据解释如何使用片段拥有的工具栏的,您不使用任何
setHasOptionsMenu()
onCreateOptionsMenu()
、或
onOptionsItemSelected()
API-这些仅用于活动拥有的应用程序栏

相反,您可以使用
工具栏
API遵循以下步骤:

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

在主机
活动
中设置工具栏。然后在必要时覆盖每个
片段
中的菜单处理

以下是一些通用的脚手架(带注释):


在主机
活动
中设置工具栏。然后在必要时覆盖每个
片段
中的菜单处理

以下是一些通用的脚手架(带注释):


很抱歉回答得太晚,最好是由片段拥有的appbar还是由活动拥有的appbar(如homerman建议的答案)我链接到的页面特别提到了这一点。如果你的应用程序栏在你的活动中随处可见,那么让它归活动所有是有意义的。如果它从一个片段变为另一个片段,或者在某些屏幕上不存在,它应该是片段的一部分。很抱歉,回答太晚了,让片段归appbar或appbar所有更好吗我链接到的页面上有一个活动拥有的appbar(如homerman建议的答案)。如果你的appbar在活动中的任何地方都可用,那么让它归该活动所有是有意义的。如果它在片段之间发生变化或在某些屏幕上不存在,它应该是片段的一部分。