基本上,我想在用户在网格视图中单击或长按单元格时显示不同的上下文菜单。我遇到的问题是,如果用户短时间点击OnItemClick侦听器,并且我看到调试器到达显示上下文菜单的代码,但不是从那里移动到onCreateContextMenu,而是转到onItemLongClick。Android GridView OnItemLongClick侦听器在OnItemClick之后调用
我已经尝试过使用布尔值来防止正在执行的长时间点击代码,它会阻止代码被执行,但是即使完成了onCreateContextMenu也不会被调用。
如果我删除onItemLongClick侦听器,则短暂点击侦听器将正常工作,并且上下文菜单显示正确。
我知道其他人问过类似的问题,但我仍然无法找到可行的解决方案。如果有人能解决这个问题或者指出我的方向正确,请告诉我,提前致谢。赏金将授予任何能够指引我朝着正确方向的人。
这是代码为听众的简化版本:
mTGrid.setOnItemClickListener(new OnItemClickListener() {
//this listener should show the context menu for a short click on the gridview.
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
mRequiredMenu = "standard";
parent.showContextMenuForChild(v);
}
});
mTGrid.setOnItemLongClickListener(new OnItemLongClickListener() {
//this listener should show the context menu for a long click on the gridview.
@Override
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
mRequiredMenu = "options";
parent.showContextMenuForChild(v);
}
});
这完全解决了我的问题。我所要做的只是完全删除onItemLongClick监听器,并使用下面的代码来获取onContextItemSelected()中的选定单元格: – collusionbdbh
AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); \t mSelectedCell =(myCellClass)info.targetView; – collusionbdbh