之前已经问过这个问题,主要是参考ListActivity,因此我无法使用他们的解决方案。 OTOH,我正在使用包含gridview的普通活动(由于其上的其他UI元素)。当我对某些网格项使用registerForContextMenu()时,不会为这些特定项调用onitemclick()处理程序。
有人可以建议是否有一个简单的解决方案吗?
我已使用
注册onItemClickListener()assetsListView.setOnItemClickListener(this);
对于网格中的每个(某些)ImageView元素,我使用
registerForContextMenu(imgView);
仅对未注册上下文菜单的项目调用onItemClick()。希望这会有所帮助。
谢谢, 拉贾斯
答案 0 :(得分:4)
我为onClick
,contextMenu注册了每个项目,并添加了一个标记,我可以用它来标识上下文菜单启动的特定小部件。
registerForContextMenu(imgView);
imgView.setTag(asset.id);
imgView.setOnClickListener(this);
启动上下文菜单后,我从小部件中获取标签供以后使用:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
if (!(v instanceof ImageView))
return;
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, v.getId(), 0, "Launch");
assetIdViaContextMenu = (String) v.getTag();
}
单击上下文菜单中的菜单项时,我使用assetIdViaContextMenu
来了解所引用的窗口小部件:
@Override
public boolean onContextItemSelected(MenuItem item)
{
if (assetIdViaContextMenu == null)
return true;
Asset asset = getAsset(assetIdViaContextMenu);
if (item.getTitle() == "Launch")
{
....
另外,我不得不重写上下文菜单的取消。
@Override
public void onContextMenuClosed(Menu menu)
{
assetIdViaContextMenu = null;
super.onContextMenuClosed(menu);
}
希望这可以帮助将来的某个人。如果您认为我可以对此有所改进,请告诉我。