Этот вопрос задан раньше, главным образом со ссылкой на ListActivity, и поэтому я не смог использовать их решения. OTOH, я использую нормальную активность (из-за других элементов интерфейса), которая содержит gridview. Когда я использую registerForContextMenu() для некоторых элементов сетки, обработчик onitemclick() не вызывается для этих конкретных элементов.
Может ли кто-нибудь предположить, есть ли простое решение для этого?
Я зарегистрировался для onItemClickListener(), используя
assetsListView.setOnItemClickListener(this);
Для каждого элемента (элемента) элемента ImageView в сетке я использую
registerForContextMenu(imgView);
OnItemClick() вызывается только для тех элементов, где контекстное меню не зарегистрировано. Надеюсь, это поможет.
Спасибо, Раджат
Я зарегистрировал каждый элемент для 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);
}
Надеюсь, это поможет кому-то в будущем. Если вы думаете, что я мог бы улучшить это, сообщите мне.