我正在使用下面的代码生成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
时要注意一些常见的错误。
您需要先注册上下文菜单。从创建上下文菜单的开发人员文档中-
如果您的活动使用ListView
或GridView
并且您希望每个项目
提供相同的上下文菜单,注册上下文菜单的所有项
通过将ListView
或GridView
传递到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);