试图隐藏和显示操作栏上的菜单项(Trying to hide and show menu items

2019-08-31 14:49发布

我已经通过对栈溢出的问题看起来并不能找到解决方案。

@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布尔假。 堆栈人说onPrepareOptionsMenu应该火每次我点击,但这情况并非如此。 我能够隐藏的onclick功能一个菜单项

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

但我有我需要隐瞒,我想显示多个菜单项等。 我怎么能去呢?

Answer 1:

它不足以改变isDown变量。 你必须调用setVisible()要更改的知名度每次方法。 这种方法并不仅仅是设置一个布尔值,所以只是改变一个布尔值,不会做更多。

变更后的isDown值为false,你需要调用invalidateOptionsMenu()调用,这将重新启动菜单onPrepareOptionsMenu()一次。

试试这个代码使项目unvisible菜单:

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


Answer 2:

试试这个,

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


Answer 3:

在FragmentActivity试试这个

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

方法FragmentActivity.onPreparePanel创建所有连接的片段菜单。 要显示菜单,您必须返回true; 如果返回false也不会显示。



Answer 4:

我有两个项目的菜单,第一:保存项目,第二:编辑项目。 我想,当我来到中进行编辑,先在“保存项目”已被隐藏,当我点击“编辑项目”,“保存项目”被证明。

所以:

  1. 在公开声明中的项目
  2. 在设定值,它onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. 设置能见度isHidden()
  4. 然后每一个地方,我想,设置能见度isVisible()

公共区域:

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

最后,它的工作原理是我想要的。



文章来源: Trying to hide and show menu items on action bar