setonitemclicklistener не работает, когда элементы gridview используют registerForContextMenu - PullRequest
1 голос
/ 23 марта 2011

Этот вопрос задавался ранее, в основном со ссылкой на ListActivity, и поэтому я не смог использовать их решения.OTOH, я использую обычную активность (из-за других элементов пользовательского интерфейса), которая содержит сетку.Когда я использую registerForContextMenu () для некоторых элементов сетки, обработчик onitemclick () не вызывается для этих конкретных элементов.

Может кто-нибудь подсказать, существует ли простое решение для этого?

Я зарегистрировался для onItemClickListener (), используя

assetsListView.setOnItemClickListener(this);

Для каждого (некоторого из) элемента ImageView в сетке я использую

registerForContextMenu(imgView);

onItemClick () вызывается только дляте пункты, где контекстное меню не зарегистрировано.Надеюсь, это поможет.

Спасибо, Раджат

1 Ответ

4 голосов
/ 30 марта 2011

Я зарегистрировал каждый элемент для 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);
}

Надеюсь, это поможет кому-то в будущем. Если вы думаете, я мог бы улучшить это, пожалуйста, дайте мне знать.

...