如何动态更改MenuItem的可见性?

时间:2012-10-11 18:07:08

标签: android

我正在开发一些Android应用程序,我有两个标签的ActionBar。当用户选择第二个选项卡时,我需要在ActionBar上显示2个图标。我有以下代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    mOptionsMenu=menu;
    menu.getItem(0).setVisible(false);
    menu.getItem(1).setVisible(false);
    return true;
} 

    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
        if (tab.getPosition()==1) {
        mOptionsMenu.getItem(0).setVisible(true);
        mOptionsMenu.getItem(1).setVisible(true);
}
    }

但是这段代码不起作用。请告诉我,我怎样才能满足我的需求?

2 个答案:

答案 0 :(得分:10)

您需要在onPrepareOptionsMenu()中设置菜单。您可以按照以下方式更改代码:

private boolean menuShow = false;

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    mViewPager.setCurrentItem(tab.getPosition()); 
    if (tab.getPosition()==1) { 
      menuShow = true;
    } 
}


public boolean onPrepareOptionsMenu(Menu menu) {
  if(menuShow){
    mOptionsMenu.getItem(0).setVisible(true);    
    mOptionsMenu.getItem(1).setVisible(true);
  }
  return true;
}

答案 1 :(得分:1)

您似乎必须更改onPrepareOptionsMenu()中的可见性。

请参阅此答案:Set visibility in Menu programatically android