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