关于在Fragment中设置Menu无效问题

作者: T9的第三个三角 | 来源:发表于2017-10-27 15:48 被阅读76次

关于在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无效,都是因为这三个原因引起,可根据具体情况分析,做出调整

来源:

关于 fragment重写onCreateOptionsMenu不执行问题

相关文章

网友评论

    本文标题:关于在Fragment中设置Menu无效问题

    本文链接:https://www.haomeiwen.com/subject/dqtdpxtx.html