【问题标题】:remove popup menu item programmatically以编程方式删除弹出菜单项
【发布时间】:2015-05-25 09:27:25
【问题描述】:

我在我的应用程序中添加了一个弹出菜单。我创建了一个如下所示的弹出菜单 xml。

Song_popup xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/ToolBarStyle">

    <item
        android:id="@+id/add_queue"
        android:title="Add to queue" />
    <item
        android:id="@+id/play_next"
        android:title="Add to favourite" />
    <item
        android:id="@+id/add_download"
        android:title="Download" />


</menu>

现在我想通过检查一个条件来删除一个项目。我该怎么做?

代码

PopupMenu popup = new PopupMenu(activity, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.song_popup, popup.getMenu());
popup.show();

【问题讨论】:

    标签: android xml popupmenu


    【解决方案1】:

    您可以删除一个菜单项,如下所示:

    Menu m = popup.getMenu();
    m.removeItem(m.findItem(R.id.add_queue));  //removes "Add to queue"
    

    条件的实施完全取决于您。


    这就是处理菜单项点击的方式:

    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            if(menuItem.getItemId() == R.id.play_next){
                Toast.makeText(YourActivity.this, "Play_next", Toast.LENGTH_SHORT).show();
                return true;
            }
            return false;
        }
    });
    

    【讨论】:

    • Popupmenu 也一样吗?
    • 还有一件事。你如何处理我的弹出菜单的项目点击?
    • 你需要在popup.setOnMenuItemClickListener()中定义PopupMenu.OnMenuItemClickListener来处理菜单项点击
    • @waqaslam m.findItem(R.id.add_queue) 返回 MenuItem 类型的项目,但 m.removeItem() 方法需要 int 作为参数。如何将 MenuItem 转换为 int ???
    • 需要添加 .getItemID()。 m.removeItem(m.findItem(R.id.add_queue).getItemID());
    【解决方案2】:

    你可以简单地做到这一点。前-

    if (popup != null && yourcondition){
          MenuItem menuitem=    popup.getMenu().getItem(1);
          menuitem.setVisible(false);
        }
    

    【讨论】:

      【解决方案3】:

      除非我遗漏了什么,否则应该很简单,例如:

      if (doNotShowAddQueue) {
          final Menu menu = popup.getMenu();
          menu.removeItem(R.id.add_queue);
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        • 2014-02-11
        相关资源
        最近更新 更多