onCreateContextMenu is not being called



我使用以下代码生成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时要注意一些常见的错误。

您需要先注册上下文菜单。从创建上下文菜单的开发人员文档中 -

如果您的活动使用ListViewGridView,并且您希望每个项目都 提供相同的上下文菜单,为上下文菜单注册所有项 通过将ListViewGridView传递给registerForContextMenu().

因此,您可以考虑在ListActivityonCreate函数中执行类似操作。

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);

相关内容

  • 没有找到相关文章

最新更新