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”。我不知道为什么
我在同一问题的其他类似问题中检查的内容:
- 我检查了我的主要活动是否有
或“onOptions ItemSelected”。没有onCreateOptions菜单
- 检查我的样式类是否没有:
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在活动中的任何地方都可用,那么让它归该活动所有是有意义的。如果它在片段之间发生变化或在某些屏幕上不存在,它应该是片段的一部分。