动态改变actionbar的menu菜单MenuItem的显示

onCreateOptionsMenu(Menu menu)方法中我们能够通过getMenuInflater().inflate(R.menu.list_option, menu);来构建一个菜单,并通过


1

menu.findItem(R.id.menu)

获得具体的一个菜单项。但这个onCreateOptionsMenu在activity的整个周期中只被调用一次,之后都不会变化,于是在android的较新版本里有了onPrepareOptionsMenu方法。

onCreateOptionsMenu方法是不能动态加载菜单的,因为他只调用了一次,你可以换onPrepareOptionsMenu这个方法来获取,他每次点击菜单都会调用。

这就貌似可以实现动态改变菜单了。

但是在下面的场景中这样还是无能为力的:

一个记事本列表界面,当记事条数为0时,actionbar菜单项只有“新建”一个菜单项

当我点击新建插入了一条记事,销毁编辑界面,重新回到列表界面,这时actionbar要求显示“新建”和“导出”两个菜单项。

如果按照刚刚介绍的方法根本不能实现菜单的动态显示,因为那种办法必须要按menu按键,而我的需求里面是根据内容改变,不是手动触发。

解决的办法是在你要更新菜单项的地方加上:


1

mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);

这个是原生actionbar的解决办法,如果你用的是 ActionBarSherlock,那么调用


1

invalidateOptionsMenu();

时间: 2024-11-09 09:01:30

动态改变actionbar的menu菜单MenuItem的显示的相关文章

动态改变actionbar上menu的图标

工作中遇到了一个需求是,在滚动的时候让actionbar上的图标进行变色.实现后在这里总结下思路. 一.先在主题中定义好Actionbar的style <style name="AppTheme" parent="BaseTheme"> <item name="actionBarStyle">@style/NAActionBarStyle</item> <item name="actionBar

Android 如何动态改变Actionbar上的item图标

1.Activity菜单机制 (与dialog类似) Activity有一套机制来实现对菜单的管理,方法如下: 1.public boolean onCreateOptionsMenu(Menu menu) 此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例. 返回true则显示该menu,false 则不显示; (只会在第一次初始化菜单时调用) 2.public boolean onPrepareOptionsMenu(Menu menu) 在onCreateOptionsMe

动态改变ToolBar中的MenuItem

最近项目中开始使用到ToolBar控件,其中有需求需要动态改变ToolBar中的MenuItem.如下图: 1.首先想到的办法是利用ToolBar自带的方法addView()和removeView(). 经测试,动态添加和删除view没有点击效果,需要自己添加,而且如果需要overflow效果,则需要自己实现PopupMenu,所以此方法适用于view比较少的情况. 2.ToolBar是用来替换ActionBar的,用过ActionBar的人应该都熟悉ActionMenuView,使用Actio

利用HTML 5中的Menu和Menuitem元素快速创建菜单

原文:Introducing the HTML5 “Menu” and “Menuitem” Elements 译文:HTML 5中Menu和Menuitem的元素介绍 译者:dwqs 今天向你介绍HTML 5中的两个元素:Menu和Menuitem,这两个元素是W3C交互元素中的一部分.现在Web的演变已经不仅仅局限于文档之间的链接,在APPs中,页面的行为越来越多,因此,是时候形成一个Web交互的标准了. Menu和Menuitem是在开发者中谈论最热门的两个元素,可能是由于主流浏览器对其缺

动态修改ActionBar Menu的显示

应用场景: 在主Activity中,采用InstrumentedActivity侧边栏的方式,侧边栏的每一项对应一个Fragment,要实现不同的Fragment动态显示与隐藏ActionBar Menu. 处理思路: 在onCreateOptionsMenu()方法中,根据标识flag动态设置MenuItem的显示与隐藏,在切换Fragment 的地方调用:invalidateOptionsMenu()方法重新加载Menu. @Override public boolean onPrepare

WPF动态加载Menu菜单

有一个项目动态加载wpf的菜单控件可以非常有效的做到更具用户权限显示或控制MenuItem菜单,如何实现这种功能,其实也非常简单. 首先需要了解Wpf的menu菜单控件,她的结构其实也非常简单 <Menu DockPanel.Dock="Top" Name="MenuOptionGroup">   <MenuItem Header="菜单1">   <MenuItem Header="内容1"&g

导航条——动态改变导航菜单的背景颜色

1.概述 在浏览一些网站时,当鼠标经过导航菜单某一项时,其背景颜色将切换为其他颜色,实现这种简单的效果会更吸引浏览者的注意. 2.技术要点 本实例主要是应用JavaScript方法来动态改变<td>标签的背景颜色实现的.当鼠标经过<td>表示的导航菜单时,会触发onMouseOver事件,然后调用自定义的JavaScript方法改变<td>的背景颜色:当鼠标移出<td>时,会触发onMouseOut事件,调用自定义的JavaScript方法还原背景颜色为初始

Android中ActionBar以及menu的代码设置样式

Android中ActionBar以及menu的代码样式如何设置?今天麦子学院android开发老师主要介绍Android中ActionBar以及menu的代码设置样式,,有需求的朋友可以参阅下 menu有些xml代码 http://schemas.android.com/apk/res/android"> <="" div=""> android:title="查找1" android:orderInCategory

动态改变对话框可调整大小属性

MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就可以改变窗口边框风格.实际上windows窗口是否可调整大小,就是根据边框的风格来确定的.窗口风格中与边框有关的值如下: WS_BORDER - Thin-line border,不能调整大小: WS_DLGFRAME - dialog box typical border,不能调整大小: WS_SIZEBOX - sizing border,可以调整大小