Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android和ActionBarCompat:如何在ICS之前的设备上更改运行时操作的可见性?_Android_Android Actionbar - Fatal编程技术网

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);