代码之家  ›  专栏  ›  技术社区  ›  Wonko the Sane

隐藏Android上下文菜单项

  •  3
  • Wonko the Sane  · 技术社区  · 14 年前

    又一个新问题。我有一个上下文菜单,我申请了一个ListView,它允许用户上下移动项目,或者删除项目。

    我在onContextItemSelected()中有代码,可以防止事情从列表的顶部或底部上移,等等,但是如果(例如)选择了列表中的顶部项,我宁愿首先隐藏上下文菜单项。

    我想我需要在onCreateContextMenu中执行此操作,但我不确定如何执行。

    这是我的onCreateContextMenu代码:

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mycontextmenu, menu);
    }
    

    谢谢,
    水处理系统

    4 回复  |  直到 14 年前
        1
  •  2
  •   Timo Ohr    14 年前

    如果为 ListView , menuInfo 将包含类型为的对象 AdapterContextMenuInfo ,它提供有关单击列表中哪个项的信息。如果它是第一个或最后一个条目,您可以从上下文菜单中删除相应的条目,但我不太确定如果没有条目留下会发生什么。

        2
  •  13
  •   Josh Clemm    14 年前

    在你的 onCreateContextMenu 方法,需要获取可能要隐藏的菜单项,并根据列表位置将其设置为不可见。

    像这样的:

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    
    if(info.position < 1) {
       myLocationMenuItem = menu.findItem(R.id.myLocation);
       myLocationMenuItem.setVisible(enable);
    }
    
        3
  •  4
  •   Denis Kutlubaev    10 年前

    这是一个解决方案 PopupMenu 以防有人像我一样寻找它。这里我有三个按钮 menu 布局文件 子菜单 在某些情况下,我会移除其中的一些:

        PopupMenu popup = new PopupMenu(this, this.actionButton);
        popup.setOnMenuItemClickListener(this);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.menu_resume_view, popup.getMenu());
    
        Menu menu = popup.getMenu();
        if (this.resume.isPublished()) {
            menu.removeItem(R.id.menu_button_publish);
        }
        else {
            menu.removeItem(R.id.menu_button_unpublish);
            menu.removeItem(R.id.menu_button_update_publish_date);
        }
    
        popup.show();
    

    当你使用 子菜单 onPrepareOptionsPanel 不被调用。所以你必须通过 id 创建时 子菜单 删除那些在特定情况下不应该有的东西。

        4
  •  1
  •   Shashank Degloorkar    11 年前

    如果需要,可以禁用特定项。

    @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo)
         {
                    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    
                    int position = info.position;
    
                    // use this position to decide your item clicked
    
                    menu.clear();
                    menu.setHeaderTitle("Context Menu Title");
                    String[] menuItems = getResources().getStringArray(
                            R.array.menu_context);
    
    
                    for (int i = 0; i < menuItems.length; i++)
                    {
                        menu.add(Menu.NONE, i , i, menuItems[i]);
                    }
                   menu.getItem(0).setEnabled(**Conditional check**);
                   menu.getItem(1).setEnabled(**Conditional check**);
                   menu.getItem(2).setEnabled(**Conditional check**);
         }