隐藏Android上下文菜单项

隐藏Android上下文菜单项,android,contextmenu,Android,Contextmenu,另一个新手问题。我有一个用于ListView的上下文菜单,它只允许用户上下移动项目,或删除项目 我在onContextItemSelected()中编写了代码,以防止内容从列表的顶部或底部向上移动,等等,但是如果(例如)选择了列表中的顶部项目,我宁愿首先隐藏上下文菜单项 我假设我需要在onCreateContextMenu中执行此操作,但我不确定如何执行 以下是我的onCreateContextMenu代码: @Override public void onCreateContextMenu(C

另一个新手问题。我有一个用于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

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

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

大概是这样的:

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

if(info.position < 1) {
   myLocationMenuItem = menu.findItem(R.id.myLocation);
   myLocationMenuItem.setVisible(enable);
}
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)菜单信息;
如果(信息位置<1){
myLocationMenuItem=menu.findItem(R.id.myLocation);
myLocationMenuItem.setVisible(启用);
}

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

@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**);
     }
@覆盖
public void onCreateContextMenu(ContextMenu,视图v,
上下文菜单信息(menuInfo)
{
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)菜单信息;
int位置=信息位置;
//使用此位置来决定单击的项目
menu.clear();
menu.setHeaderTitle(“上下文菜单标题”);
字符串[]menuItems=getResources().getStringArray(
R.array.menu_context);
对于(int i=0;i
这是一个
弹出菜单的解决方案,以防有人像我一样寻找它。这里我在
菜单
布局文件中为
弹出菜单
设置了3个按钮,在某些情况下,我会删除其中的一些按钮:

    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
时,不会调用
onprepareoptionspan
。因此,在创建
PopupMenu
时,您必须通过
id
获取菜单项,并删除在特定情况下不可用的菜单项。

用于将来的搜索。。。使用AdapterContextMenuInfo adapterInfo=(AdapterContextMenuInfo)菜单信息;如果您不想基于请求上下文的行显示特定项目的上下文菜单,只需在打开菜单之前返回onCreateContextMenu()。您好,知道如果只使用图标,如何删除标题空间吗
menu.getItem(inti)
需要索引,而
menu.removietem(inti)
需要id.smh