关于在Fragment中设置Menu,本身简单,但是其中有容易忽略的几个坑,需要注意:
先来设置个Menu:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_main, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
代码简答, 寥寥几行,但是Menu并没有显示,可能问题为:
- 1、 设置Menu后,没有在Fragment的onCreate方法中设置
setHasOptionsMenu(true);
- 2、 此条为网友总结,我没有遇到,贴出来让大家做个参考
事件被其他的方法拦截或者屏蔽了menu菜单,从而导致onCreateOptionsMenu方法不执行
所以你需要去检查自己写的方法前后没有这种情况,一般情况都是在重写onKeyDown的方法被拦截了
修改改方法的返回即可
// 监听返回键,退出程序
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
wifiHotManager.closeAWifiHot();
this.finish();
return true;//①
}
return true;//②
}
- 3、由于设置了 NoActionBar 的主题导致,没有ActionBar,当然也就无法添加Menu,所以有两个解决办法:
· 1 修改Theme,改为含有ActionBar 的主题,这样整个应用或者Activity 主题都将被更肥,代价较大
· 2 将当前Activity设置ActionBar:
private void initToolbar() {
toolbar.setTitle("");
((MainActivity) getActivity()).setSupportActionBar(toolbar); //为Fragment所在Activity设置ActionBar
}
一般设置Menu无效,都是因为这三个原因引起,可根据具体情况分析,做出调整