onCreateContextMenu未被调用

时间:2017-01-10 02:12:07

标签: android android-layout android-contextmenu

我使用以下代码生成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

是否可以,因为我使用this answer显示在我之前的问题中的自定义AdapterView?此外,如果重要的话,我的MainActivity正在延长AppCompatActivity

我已经检查了其他问题,例如onCreateContextMenu isn't being called,但我没有使用onItemLongClickListener

1 个答案:

答案 0 :(得分:3)

没有足够的代码来理解这里的实际错误。但我可能会建议在实施ContextMenu时经常犯错误。

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

  

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

因此,您可以考虑在onCreate的{​​{1}}函数中执行此类操作。

ListActivity

我在registerForContextMenu(getListView()); 中看不到任何MenuInflater。您需要在创建上下文菜单时对视图进行充气。

onCreateContextMenu

来自文档

  

@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方法。这是您定义菜单的位置   项目,通常是通过夸大菜单资源。

在这里你可以找到完整的implementation documentation。希望有所帮助!

<强>更新

如果您未使用onCreateContextMenu(),则无法拨打ListActivity。在这种情况下,只需在注册列表的上下文菜单时传递getListView引用。

ListView