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

1

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

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

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

assetsListView.setOnItemClickListener(this);

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

registerForContextMenu(imgView);

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

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

  • 0
    привет, Раджат, можешь ли ты опубликовать свой код, пожалуйста
  • 0
    @Chirag, я добавил код выше
Теги:
listener
gridview

1 ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню