Как узнать, для какого ListView был выбран ContextItem? - PullRequest
0 голосов
/ 18 мая 2010

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

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

в этом методе

 public boolean onContextItemSelected(MenuItem item) 

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

Ответы [ 4 ]

1 голос
/ 18 мая 2010

Вы прикрепляете Tag s / Holders к строке 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.');
        }
        //...
    }
1 голос
/ 18 мая 2010

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

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

0 голосов
/ 07 марта 2011

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

0 голосов
/ 18 мая 2010

РЕДАКТИРОВАТЬ: я был не прав. Несколько ListView будут работать вместе на одном экране. Может быть сложно из-за недвижимости, но будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...