我正在使用下面的代码生成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,它显示在this answer到我的前一个问题?另外,如果这很重要的话,我的MainActivity正在扩展。
我已经检查过其他问题,比如这个onCreateContextMenu isn't being called但我没有使用AppCompatActivity

最佳答案

没有足够的代码来理解这里的实际错误。但我可能建议在实现ContextMenu时要注意一些常见的错误。
您需要先注册上下文菜单。从创建上下文菜单的开发人员文档中-
如果您的活动使用ListViewGridView并且您希望每个项目
提供相同的上下文菜单,注册上下文菜单的所有项
通过将ListViewGridView传递到registerForContextMenu()
因此,您可以考虑在onCreate函数中执行类似的操作。

registerForContextMenu(getListView());

我在你的ListActivity里看不到任何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);
}

从文件中
onCreateContextMenu允许您从菜单中为上下文菜单充气
资源。回调方法参数包括
用户选择并提供一个MenuInflater对象
有关选定项的其他信息。如果你的活动
每个视图都提供不同的上下文菜单,您可以
使用这些参数来确定要充气的上下文菜单。
您可能需要为列表项实现长单击侦听器。因为它似乎只适用于长点击事件。
当注册视图收到长单击事件时,系统调用
你的View方法。这是你定义菜单的地方
项目,通常通过扩展菜单资源。
这里是完整的implementation documentation。希望能有帮助!
更新
如果不使用ContextMenu.ContextMenuInfo,则不应调用onCreateContextMenu()。在这种情况下,只需在为列表注册上下文菜单时传递ListActivity引用。
ListView lv = (ListView) findViewById(R.id.my_list);
registerForContextMenu(lv);

07-24 09:49