2011-12-22 123 views
3

我正在基于列表视图创建一个非常简单的活动。 我想添加一个上下文菜单到列表中的每个项目,所以我打电话给registerForContextMenu(mListView)。然后我执行了onCreateContextMenuonContextItemSelected的方法。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

没有看到你的代码,我不能给出一个确切的答案,但你可以尝试添加ContextMenuListener手动

getListView().setOnCreateContextMenuListener(this); 
+0

我添加了代码。事情是我的菜单显示并调用onCreateContextMenuListener。不过,我仍然想尝试手动(使用你的方法),它也没有工作。 –

0

删除此检查:

if (v == mListView) { 
    ... 
} 

onCreateContextMenu(..)方法

+0

在我的真实代码中,我在这个“其他”中添加了一个日志,如果这样的话,现在如果它没有进入菜单创建部分代码。但是,菜单正如其显示的那样正确创建。 –

+0

对不起,没有注意到你的问题。如果你评论这部分代码会发生什么:'mListView.setOnItemClickListener(new OnItemClickListener(){...};'? –

+0

它也行不通;-) –

15

我遇到了使用ActionBarSherlock库的相同问题。

如果您正在使用该库,请确保您导入正确的菜单项android.view.MenuItem

或者只是指定全包在这样的方法标题:

public boolean onContextItemSelected(android.view.MenuItem item) {} 
+1

感谢兄弟!你为我节省了很多时间! – Andres

0

使用OnMenuItemClickListener是工作。