似乎没有调用onContextItemSelected

时间:2011-12-22 16:04:33

标签: android listview contextmenu

我正在基于列表视图创建一个非常简单的Activity。 我想为列表中的每个项目添加一个上下文菜单,因此我调用了registerForContextMenu(mListView)。 然后,我实施了方法onCreateContextMenuonContextItemSelected

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()方法,该方法在菜单关闭时正确调用。

5 个答案:

答案 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它是可行的。