我使用以下代码生成onCreateContextMenu
,但是,单击列表项时没有得到任何响应。
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
int currentId = (int) info.id;
menu.add(0, MENU_DELETE_ID, 0, "Delete");
}
我稍后将使用currentId
,但上面的代码不会导致带有单词Delete
的弹出窗口。
可能是因为我使用的是自定义AdapterView
,这在我上一个问题的答案中显示?此外,如果这很重要,我的MainActivity
正在扩展AppCompatActivity
。
我已经检查了其他问题,例如没有调用创建上下文菜单上的这个问题,但我没有使用onItemLongClickListener
没有足够的代码来理解这里到底出了什么问题。但我可能会建议在实施ContextMenu
时要注意一些常见的错误。
您需要先注册上下文菜单。从创建上下文菜单的开发人员文档中 -
如果您的活动使用
ListView
或GridView
,并且您希望每个项目都 提供相同的上下文菜单,为上下文菜单注册所有项 通过将ListView
或GridView
传递给registerForContextMenu()
.
因此,您可以考虑在ListActivity
的onCreate
函数中执行类似操作。
registerForContextMenu(getListView());
而且我在你的onCreateContextMenu
中看不到任何MenuInflater
.您需要在创建上下文菜单时膨胀视图。
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
从文档
MenuInflater
允许您从菜单中膨胀上下文菜单 资源。回调方法参数View
包括 用户选择ContextMenu.ContextMenuInfo
和提供 有关所选项目的其他信息。如果您的活动有 多个视图,每个视图提供不同的上下文菜单,您可能会 使用这些参数来确定要膨胀的上下文菜单。
您可能必须为列表项实现长单击侦听器。因为它似乎仅适用于长点击事件。
当注册的视图收到长按事件时,系统会调用 您的
onCreateContextMenu()
方法。这是您定义菜单的地方 项,通常通过膨胀菜单资源。
在这里,您可以获取完整的实现文档。希望对您有所帮助!
更新
如果您不使用ListActivity
则无法拨打getListView
。在这种情况下,只需在为列表注册上下文菜单时传递ListView
引用即可。
ListView lv = (ListView) findViewById(R.id.my_list);
registerForContextMenu(lv);