2010-05-18 2 views
0

У меня есть активность с тремя списками, каждая из которых имеет три разных курсора, но все они имеют одинаковый код show/resolve ContextMenu, и когда происходит событие выбора, я хочу, чтобы ListView обновил его.Как получить, какой ListView был выбран ContextItem?

Я не могу использовать menuInfo.targetView, так как это удерживает LinearLayout для строки ListView, а не ListView.

в этом методе

public boolean onContextItemSelected(MenuItem item) 

Как это возможно?

ответ

1

Вы присоединяетесь Tag s/Держатели к строке View s в Adapter s, справа?
Имейте класс меток для каждого адаптера.
Теперь

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
       .getMenuInfo(); 
     Class<?> tagClass = info.targetView.getTag().getClass(); 
     if(tagClass == FirstTag.class){ 
      // the first list 
     } else if(tagClass == SecondTag.class){ 
      // the second one 
     } else { 
      throw new IllegalArgumentException('I've screwed up this hack.'); 
     } 
     //... 
    } 
+0

Этот метод хорош и полезен, хотя получение ListView будет лучшим. Надеюсь, кто-то ответит на него. – Pentium10

1

Используйте MenuInfo, переданное как третий аргумент onCreateContextMenu(). Например, вы можете добавить ссылку на свой ListView. Вы можете запросить его у item.getMenuInfo().

Редактировать: Извините, не существует способа установить MenuInfo. Попробуйте создать элементы контекстного меню с разными идентификаторами groupID для каждого спискаView, затем вы можете переключиться на основе onMenuItem.getGroupId().

+0

Как передать этот ListView в метод 'onContextItemSelected'? – Pentium10

-1

EDIT: Я ошибался. Серийный ListView будет работать вместе на одном экране. Возможно, это будет связано с недвижимостью, но она будет работать.

+0

Этот ответ не связан с проблемой. Не делайте то, что OP не сказал, спросите раньше. ListViews находятся на отдельных вкладках, пользовательский интерфейс является последовательным, и снова это не проблема, с которой я столкнулся. – Pentium10

+0

Также не забывайте, что Android можно использовать в телевизионных приставках, таких как телевизоры, где разные прокручиваемые области разные. – Pentium10

+0

Если ваш ListViews находится на отдельных вкладках, вы можете определить, на какой вкладке вы находитесь (TabHost.getCurrentTab()), чтобы теперь вы обновляли ListView. –

0

Попробуйте menuInfo.targetView.getParent() - это сам ListView.

Смежные вопросы