我有一个Activity
extends ActionBarActivity
取自ActionBarCompat
代码示例,我试图在运行时显示/隐藏菜单项(操作)。
我已尝试在setVisible()
上使用MenuItem
并适用于ICS,但在ICS之前,它只会更改菜单项的可见性(菜单按钮按下),而ActionBar
不会收到菜单更改通知。
任何解决方案?提前谢谢!
答案 0 :(得分:5)
我在/ res / menu /下创建了多个操作栏项的替代项。我让一名成员指出我现在正在使用哪一个。要更换菜单,我打电话:
protected void setMenuResource(int newMenuResourceId)
{
_menuResource = newMenuResourceId;
invalidateOptionsMenu();
}
我将onCreateOptionsMenu()覆盖为:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
if (_menuResource != 0)
{
getSupportMenuInflater().inflate(_menuResource, menu);
return true;
}
return super.onCreateOptionsMenu(menu);
}
现在,如果我想更改动作项目,我打电话:
setMenuResource(R.menu.actionbar_menu_X);
答案 1 :(得分:4)
这就是我解决它的方法:
在actionbarcompat项目的ActionBarHelperBase.java中
...
private View addActionItemCompatFromMenuItem(final MenuItem item) {
final int itemId = item.getItemId();
...
此类的创建者复制了对象的属性,但没有复制item的id,因此以后用fiven id找不到它。
所以我在那个方法中添加了它:
...
actionButton.setId(itemId);
...
和我在同一个班级中使用:
@Override
public void hideMenuItemById(int id, boolean show){
getActionBarCompat().findViewById(id).setVisibility(show? View.VISIBLE: View.GONE);
}
希望它可以帮到你。
答案 2 :(得分:3)
您必须调用supportInvalidateOptionsMenu(),这是ActionBarActivity的相关方法: