MenuInflater用法_韦_恩的博客-CSDN博客MenuInflater是用来加载menu布局文件的.应用程序运行时会预先加载资源中的布局文件,如果Menu布局中的资源比较多,会影响性能,所以可以选择MenuInflater方式用的时候加载,这样减轻了应用程序运行时很多负担.https://blog.csdn.net/qq_42539194/article/details/131895358?spm=1001.2014.3001.5501上篇文章讲了如何加载menu布局,本文在此基础上扩展下,如何在程序运行过程中动态控制Menu菜单的显示与隐藏。
首先要明白的是:
系统调用onCreateOptionsMenu()之后,它将保留您填充的菜单的一个实例,并且不会再次调用onCreateOptionsMenu(),除非菜单因某种原因无效。
onCreateOptionsMenu()仅用于创建初始菜单状态,而不是在活动生命周期中进行更改。
目录
那如果我们想控制menu菜单的显示与隐藏要怎么办呢?总结下基本是如下这个步骤:
①menu的xml文件中对menu的子项设置分组
②Java代码中定义变量SurveyToolVis,用来控制menu分组是否显示
③Java代码中写onPrepareOptionsMenu方法,并调用setGroupVisible方法,该方法将根据SurveyToolIsVis的值控制menu的显示隐藏。
If you want to modify the options menu based on events that occur during the activity lifecycle, you can do so in the
onPrepareOptionsMenu()
method. This method passes you theMenu
object as it currently exists so you can modify it, such as add, remove, or disable items. (Fragments also provide anonPrepareOptionsMenu()
callback.)
同理在onCreateOptionsMenu方法中也调用setGroupVisible方法,实现初始挂载menu时隐藏还是显示的设置。
④在需要控制menu显示还是隐藏的按钮方法内设置SurveyToolVis属性,最关键是调用invalidOptionMenu()方法。此时系统会帮你调用onPrepareOptionsMenu方法进行menu菜单刷新,借此实现menu的显示与隐藏。
On Android 3.0 and higher, the options menu is considered to always be open when menu items are presented in the app bar. When an event occurs and you want to perform a menu update, you must call
invalidateOptionsMenu()
to request that the system callonPrepareOptionsMenu()
.