如何通过单击事件以编程方式显示/隐藏操作栏项目

Posted

技术标签:

【中文标题】如何通过单击事件以编程方式显示/隐藏操作栏项目【英文标题】:How to Show/Hide Action Bar item programmatically via Click Event 【发布时间】:2016-09-29 07:42:32 【问题描述】:

默认情况下,我使用以下代码将可见性设置为 false。

@Override
    public boolean onCreateOptionsMenu(Menu menu) 
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_items, menu);
       menu.findItem(R.id.action_share).setVisible(false);
        return true;
    

现在,当用户单击我的活动中的按钮时,如何使其再次可见。

【问题讨论】:

【参考方案1】:

在您的 onCreateOptionsMenu 中:

public boolean onCreateOptionsMenu(Menu menu) 
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_items, menu);
       if (hideIcon)
          menu.findItem(R.id.action_share).setVisible(false);
       else
          menu.findItem(R.id.action_share).setVisible(true);
       
        return true;
    

在要显示/隐藏图标的方法中,只需将布尔 hideIcon 设置为 true 或 false 并调用:

invalidateOptionsMenu();

刷新菜单。

【讨论】:

【参考方案2】:

获取该菜单项的实例,您可以每次设置其项可见性。

        Menu mMenu;
        @Override
        public boolean onCreateOptionsMenu(Menu menu) 
            // Inflate the menu; this adds items to the action bar if it is present.
           getMenuInflater().inflate(R.menu.menu_items, menu);
           mMenu = menu;
           mMenu.findItem(R.id.action_share).setVisible(false);
           return true;
        

//somewhere else

mMenu.findItem(R.id.action_share).setVisible(true);

并基于@chol 接听电话invalidateOptionsMenu();

【讨论】:

【参考方案3】:

虽然你可以创建一个类字段

   private Menu menu;

并在 onCreateOptionsMenu() 中获取其值

   this.menu = menu;

然后在clickListener中编写代码

   this.menu.findItem(R.id.action_share).setVisible(true);

【讨论】:

以上是关于如何通过单击事件以编程方式显示/隐藏操作栏项目的主要内容,如果未能解决你的问题,请参考以下文章

如何强制显示移动 Safari 底部导航栏以编程方式显示?

如何通过在Vue中单击以编程方式触发可拖动的“移动”事件?

如何在剑道中创建没有弹出窗口的事件?还是以编程方式创建事件?

以编程方式显示/隐藏虚拟键盘

以编程方式单击 UIImageView 上的事件

Access 2007列表框:如何以编程方式单击?