我正在基于列表视图创建一个非常简单的Activity。
我想为列表中的每个项目添加一个上下文菜单,因此我调用了registerForContextMenu(mListView)
。
然后,我实施了方法onCreateContextMenu
和onContextItemSelected
。
onCreateContextMenu
有效(上下文菜单正确显示),但是当我点击此菜单的某个项目时没有任何反应,上下文菜单就会消失,方法onContextItemSelected
也不会被调用(我只是在其中放入一个日志来检查)。
如果它可以提供帮助,请注意ListView
也附加了onItemClickListener
。
我忘记了什么吗?
谢谢!
编辑:这是代码(我隐藏了一些不相关的东西)@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListView = new ListView(this);
mContacts = new Vector<Contact>();
mAdapter = new ContactAdapter(this, mContacts);
registerForContextMenu(mListView);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
... };
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if (v == mListView) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_item_contextmenu, menu);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Log.v("Contacts", "onContextItemSelected called");
return super.onContextItemSelected(item);
}
编辑2:我添加了onContextMenuClosed()
方法,该方法在菜单关闭时正确调用。
答案 0 :(得分:15)
使用ActionBarSherlock库我遇到了同样的问题。
如果您使用的是该库,请确保导入正确的 MenuItem android.view.MenuItem
。
或者只是在方法标题中指定完整的包,如下所示:
public boolean onContextItemSelected(android.view.MenuItem item) {}
答案 1 :(得分:0)
如果没有看到您的代码,我无法给出确切的答案,但您可以尝试手动添加ContextMenuListener
getListView().setOnCreateContextMenuListener(this);
答案 2 :(得分:0)
删除此项检查:
if (v == mListView) {
...
}
来自onCreateContextMenu(..)
方法
答案 3 :(得分:0)
我在这里找到了一个解决方法: onContextItemSelected never called using a Dialog with a ListView
但是,我仍然想知道为什么它不能按预期工作。
谢谢大家的时间!
答案 4 :(得分:0)
使用OnMenuItemClickListener它是可行的。