Android和ActionBarCompat:如何在ICS之前的设备上更改运行时操作的可见性?
我有一个Android和ActionBarCompat:如何在ICS之前的设备上更改运行时操作的可见性?,android,android-actionbar,Android,Android Actionbar,我有一个活动,它扩展了ActionBarCompat代码示例中的ActionBarActivity,我试图在运行时显示/隐藏菜单项(操作) 我曾尝试在MenuItem上使用setVisible(),适用于ICS,但在ICS之前的版本中,它只更改菜单项的可见性(按菜单按钮),而ActionBar不会收到菜单更改的通知 有解决办法吗?提前谢谢 我就是这样解决的: 在actionbarcompat项目的ActionBarHelperBase.java中 此类的创建者复制了对象的属性,但没有复制项的
活动
,它扩展了ActionBarCompat代码示例中的ActionBarActivity,我试图在运行时显示/隐藏菜单项(操作)
我曾尝试在MenuItem
上使用setVisible()
,适用于ICS,但在ICS之前的版本中,它只更改菜单项的可见性(按菜单按钮),而ActionBar
不会收到菜单更改的通知
有解决办法吗?提前谢谢 我就是这样解决的: 在actionbarcompat项目的ActionBarHelperBase.java中 此类的创建者复制了对象的属性,但没有复制项的id,因此以后不可能找到具有5个id的项 因此,我在该方法中添加了它:
...
actionButton.setId(itemId);
...
在同一类中,我只使用:
@Override
public void hideMenuItemById(int id, boolean show){
getActionBarCompat().findViewById(id).setVisibility(show? View.VISIBLE: View.GONE);
}
希望它能对您有所帮助。我在/res/menu/下创建了多个可选的操作栏项。我保留了一个成员来指示我现在正在使用的成员。要替换菜单,我调用:
protected void setMenuResource(int newMenuResourceId)
{
_menuResource = newMenuResourceId;
invalidateOptionsMenu();
}
我将onCreateOptions菜单()覆盖为:
现在,如果我想更改操作项,我调用:
setMenuResource(R.menu.actionbar_menu_X);
您必须调用SupportInvalidateOptions功能表(),这是ActionBarActivity的相关方法:
我知道这不能回答你的问题,但你看过ActionBarSherlock()吗?您完全可以更改pre-ICS设备上菜单项的可见性。即使您不想切换
ActionBar
实现,您也可以在ActionBar夏洛克源代码中找到解决方案。这是个好主意。有什么建议可以说明你应该看的地方吗?请你详细说明你的答案,再补充一点细节。我试过了,但没能成功。是否涉及其他步骤?无法从活动中调用该方法。只能从ActonBarHelper调用方法。我不知道这段代码应该如何工作。请参阅演示项目以了解实现说明,invalidateOptionsMenu()
仅为API 11及以上版本。它由API 10的Sherlock库实现;它也在兼容性库中实现为getActionBarHelper().InvalidateOptions菜单()。它不在ActionBarHelper类中实现。你能更详细地解释一下吗。@Steellight“getActionBarHelper()”是什么意思?我找不到这样的api方法。
@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);