我使用以下代码生成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
答案 0 :(得分:3)
没有足够的代码来理解这里的实际错误。但我可能会建议在实施ContextMenu
时经常犯错误。
您需要先注册上下文菜单。从创建上下文菜单的开发人员文档 -
如果您的活动使用
ListView
或GridView
,并且您希望每个项目都有 提供相同的上下文菜单,注册上下文菜单的所有项目 将ListView
或GridView
传递给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