12

I have looked through the questions on stack overflow and can't find the solution.

@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;
}

This sets my menu items to visible (item1 and item2). the onclick works fine

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

Then this sets my isdown boolean to false. on stack people say that the onPrepareOptionsMenu should fire everytime I click but this is not the case. I am able to hide one menu item on the onclick function

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

But I have multiple menu items that I need to hide and others that I want to show. how can I go about this?

4

4 回答 4

19

isDown改变变量是不够的。setVisible()每次要更改可见性时都必须调用该方法。该方法不仅仅是设置一个布尔值,所以仅仅改变一个布尔值是行不通的。

isDown值更改为 false 后,您需要调用invalidateOptionsMenu()which 将通过再次调用重新启动菜单onPrepareOptionsMenu()

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

...
isdown = false;
invalidateOptionsMenu();
...
于 2013-04-19T22:48:51.180 回答
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);
于 2013-04-20T02:53:56.570 回答
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 则不会显示。

于 2014-09-10T20:48:31.177 回答
0

我有一个包含两个项目的菜单,第一个:保存项目,第二个:编辑项目。我想当我进来编辑时,一开始“保存项目”被隐藏了,当我点击“编辑项目”时,显示“保存项目”。

所以:

  1. 公开申报物品
  2. 为它设置值onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. 将可见性设置为isHidden()
  4. 然后在我想要的每个地方,将可见性设置为isVisible()

公共区域:

MenuItem saveItem;

onCreateOptions菜单:

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

最后它按我的意愿工作。

于 2016-12-29T13:06:57.497 回答