android - 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”。我不知道为什么。
我在具有相同问题的其他类似问题中检查的内容:
- 我检查了我的主要活动是否有一个
onCreateOptionsMenu
或'onOptionsItemSelected'。它没有* - 检查我的样式类是否没有:
android:theme="@android:style/Theme.Black.NoTitleBar
没有任何一点是无效的。我错过了什么。我需要检查其他东西吗?
解决方案
根据解释如何使用 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;
}
});
}
推荐阅读
- php - Wordpress 简码 AMP 绑定不起作用
- c++ - 旋转二维圆函数
- c - 在指向数组的指针数组中实现数组的最后一行?
- javascript - 向下滚动页面后,粘性导航栏不显示所有下拉选项的问题
- nginx - Nginx - 创建多个子域
- c# - 将连接字符串保存为 xml 文件
- html - 没有单词时如何修复高度dt和dd
- c# - “成员 'Class1.GetChar(string, int)' 无法通过实例引用访问
- ssl - 在 SSL 双向认证中,客户端和服务器证书究竟是如何相互认证的?
- opengl-es - eglCreateImageKHR is working only with RGBA8888 format. How to send RGB888 data?