Android和ActionBarCompat:如何在pre-ICS设备上更改运行时操作的可见性?

Mau*_*rix 12 android android-actionbar

我有一个Activityextends ActionBarActivity取自ActionBarCompat代码示例,我想在运行时显示/隐藏菜单项(操作).

我已经尝试使用setVisible()MenuItem和适用于ICS,但在预ICS只更改菜单项目(菜单按钮按下),而知名度ActionBar没有得到通知的菜单更改.

有解决方案吗 提前致谢!

Ste*_*ght 5

我在/ res/menu /下创建了多个动作栏项目的替代品.我让一名成员指出我现在正在使用哪一个.要更换菜单,我打电话:

protected void setMenuResource(int newMenuResourceId)
{
    _menuResource = newMenuResourceId;
    invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)

我将onCreateOptionsMenu()覆盖为:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    if (_menuResource != 0)
    {
        getSupportMenuInflater().inflate(_menuResource, menu);
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想更改动作项目,我打电话:

setMenuResource(R.menu.actionbar_menu_X);
Run Code Online (Sandbox Code Playgroud)


Rog*_*ien 4

这就是我解决它的方法:

在actionbarcompat项目的ActionBarHelperBase.java中

...

private View addActionItemCompatFromMenuItem(final MenuItem item) {

final int itemId = item.getItemId();
Run Code Online (Sandbox Code Playgroud)

....

这个类的创建者复制了object的属性,但没有复制item的id,所以以后不可能用5n id找到它。

所以我在该方法中添加了它:

...
actionButton.setId(itemId);
...
Run Code Online (Sandbox Code Playgroud)

在同一堂课中我只是使用:

@Override
public void hideMenuItemById(int id, boolean show){
    getActionBarCompat().findViewById(id).setVisibility(show? View.VISIBLE: View.GONE);
}
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。