试图在操作栏上隐藏和显示菜单项

时间:2013-04-19 22:40:34

标签: android menu android-actionbar

我已经查看了有关堆栈溢出的问题,但无法找到解决方案。

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.themenu, menu);
    MenuItem   item = menu.findItem(R.id.menu_settings);
    MenuItem item2 = menu.findItem(R.id.menu_save);
    item.setVisible(isdown);
    item2.setVisible(isdown);
    return true;
}

这会将我的菜单项设置为可见(item1和item2)。 onclick工作得很好

public void inflateTextarea() {
    if(isdown == true) {
        isdown = false;
        LinearLayout tl = (LinearLayout)findViewById(R.id.content);
        tl.setVisibility(View.VISIBLE);
        ScaleAnimation scale =  new ScaleAnimation(1, 1, 0, 1);
        scale.setFillAfter(true);
        scale.setDuration(500);
        tl.startAnimation(scale);
    }
}

然后将我的isdown布尔值设置为false。堆栈上的人说每次点击都会触发onPrepareOptionsMenu,但事实并非如此。 我能够在onclick功能上隐藏一个菜单项

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.menu_settings: 
            Log.v("Log:","edit_item pressed");
            return true;
    }
}

但是我需要隐藏多个菜单项以及我想要显示的其他菜单项。 我怎么能这样做呢?

4 个答案:

答案 0 :(得分:19)

它不足以改变isDown变量。每次要更改可见性时,都必须调用setVisible()方法。该方法不仅仅是设置一个布尔值,因此只需更改布尔值即可。

isDown值更改为false后,您需要拨打invalidateOptionsMenu(),再次拨打onPrepareOptionsMenu()即可重新启动该菜单。

尝试使用此代码使菜单项不可见:

...
isdown = false;
invalidateOptionsMenu();
...

答案 1 :(得分:11)

试试这个,

private Menu menu=null;
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater)
{
    inflater.inflate(R.menu.note_menu, menu);
    this.menu=menu;
super.onCreateOptionsMenu(menu,inflater);
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown);
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown);
}

执行onCreateOptionsMenu()后,如果要在任何位置隐藏菜单 然后只需更改isdown的值并重复此代码,

menu.findItem(R.id.menu_settings).setVisible(isdown);
menu.findItem(R.id.menu_save).setVisible(isdown);

答案 2 :(得分:0)

在FragmentActivity中尝试此操作

public boolean onPreparePanel(int featureId, View view, Menu menu) {
    if(isLeftMenuOpened()) return false;
    return super.onPreparePanel(featureId, view, menu);
}

方法FragmentActivity.onPreparePanel为所有附加的片段创建菜单。您必须返回true才能显示菜单;如果你返回false,它将不会显示。

答案 3 :(得分:0)

我有一个包含两个项目的菜单,第一个:保存项目,第二个:编辑项目。当我进入编辑时,我想要第一个"保存项目"已被隐藏,当我点击"编辑项目","保存项目"被展示了。

所以:

  1. 在公共场合声明一个项目
  2. onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. 中为其设置值
  4. 将展示次数设置为isHidden()
  5. 然后在我想要的任何地方,将可见性设置为isVisible()
  6. 公共区域:

    MenuItem saveItem;
    

    onCreateOptionsMenu:

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_detail_products, menu);
        saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save);
        saveItem.setVisible(isHidden());
    }
    

    我想要的地方:

    saveItem.setVisible(isVisible());
    

    最后它按照我的意愿运作。