隐藏Android上下文菜单项

时间:2010-11-18 16:01:41

标签: android contextmenu

另一个新手问题。我有一个上下文菜单,我申请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);
}

谢谢,
WTS

4 个答案:

答案 0 :(得分:13)

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

这样的事情:

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;

if(info.position < 1) {
   myLocationMenuItem = menu.findItem(R.id.myLocation);
   myLocationMenuItem.setVisible(enable);
}

答案 1 :(得分:3)

这是PopupMenu的解决方案,以防万一有人像我一样寻求它。我在menu的{​​{1}}布局文件中有3个按钮,在某些情况下我删除了其中一些按钮:

PopupMenu

使用 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(); 时,PopupMenu未被调用。因此,您必须在创建onPrepareOptionsPanel时按id获取菜单项,并删除那些在特定情况下不可用的菜单项。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

如果您愿意,可以禁用特定项目。

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