当gridview项使用registerForContextMenu时,setonitemclicklistener不工作

时间:2011-03-23 06:10:11

标签: android gridview listener

之前已经问过这个问题,主要是参考ListActivity,因此我无法使用他们的解决方案。 OTOH,我正在使用包含gridview的普通活动(由于其上的其他UI元素)。当我对某些网格项使用registerForContextMenu()时,不会为这些特定项调用onitemclick()处理程序。

有人可以建议是否有一个简单的解决方案吗?

我已使用

注册onItemClickListener()
assetsListView.setOnItemClickListener(this);

对于网格中的每个(某些)ImageView元素,我使用

registerForContextMenu(imgView);

仅对未注册上下文菜单的项目调用onItemClick()。希望这会有所帮助。

谢谢, 拉贾斯

1 个答案:

答案 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);
}

希望这可以帮助将来的某个人。如果您认为我可以对此有所改进,请告诉我。

相关问题