Откройте контекстное меню под элементом в ListView

Я ищу способ открыть ContextMenu "под" элемент в файле ListView. Пример этой реализации можно найти в приложении для Android «reddit is fun». Я прикрепил снимок экрана для справки.

скриншот

Я пытался добиться этого в течение довольно долгого времени, но безуспешно. Как я могу реализовать эту функциональность?

Я думаю, что это очень хороший способ показать контекстное меню, и я бы тоже хотел использовать эту технику!


person zeiger    schedule 14.09.2012    source источник
comment
Я бы реализовал это дополнительное меню прямо в макете строки.   -  person user    schedule 14.09.2012
comment
@Luksprog Я попробую это сегодня вечером. Но я подозреваю, что когда я прокручиваю ListView, он будет повторно использовать это меню для другого элемента списка, и если я изменил меню, чтобы показать, скажем, Unsave вместо Save для более раннего элемента, он будет неправильно показывать Unsave для новый элемент (поскольку представления повторно используются во время ListViewпрокрутки)   -  person zeiger    schedule 14.09.2012
comment
Этого не произойдет, если вы позаботитесь о том, чтобы показать правильный статус каждой строки (что вы уже должны сделать при использовании ListView). Вам просто нужно сохранить и запомнить правильное состояние каждой строки. В зависимости от ваших текущих данных строки это может быть очень просто сделать.   -  person user    schedule 14.09.2012
comment
Я адаптировал старый код, чтобы показать вам, как можно сделать то, что я сказал выше. Вы можете найти его здесь gist.github.com/3722950 ;   -  person user    schedule 14.09.2012
comment
@Luksprog, не могли бы вы опубликовать оба своих комментария в качестве ответа, чтобы я мог принять его как правильный ответ? Ваша идея о реализации макета меню непосредственно в макете строки сработала, и предоставленного вами примера кода было достаточно, чтобы заставить его работать. Спасибо!   -  person zeiger    schedule 15.09.2012


Ответы (3)


Это меню может быть реализовано непосредственно в макете строки. Вам нужно будет добавить к вашему текущему макету дополнительный макет меню (и сначала скрыть его, вы, вероятно, не хотите показывать его, когда пользователь впервые работает с ListView). Все, что вам нужно, это добавить логику для отображения/скрытия меню, а также отслеживать, что происходит с самим меню (в пользовательском адаптере) и элементами в нем (например, меню открыто/закрыто, статус элементов в нем). Вы можете найти простой пример того, как это сделать здесь: https://gist.github.com/3722950 .

person user    schedule 15.09.2012

Используйте PopupWindow для хранения пунктов контекстного меню. Всплывающее окно можно легко расположить на экране. Дополнительную информацию о PopupWindow можно найти здесь или найти руководства по этой теме в Google. .

person Marcin Orlowski    schedule 14.09.2012
comment
Я не уверен, как убедиться, что PopupWindow будет отображаться точно под элементом в ListView. Я не хочу, чтобы плавающий контейнер появлялся поверх представления, которое сейчас находится на переднем плане. - person zeiger; 14.09.2012
comment
Вы можете сделать позиционирование с точностью до пикселя. Итак, все, что вам нужно, это получить положение экрана для представления строки. См. stackoverflow.com/questions/2139700/ - person Marcin Orlowski; 14.09.2012

Можете ли вы использовать UitabBarController с tabBars в качестве общего доступа, сохранения, скрытия, подобных комментариев. Затем, после того, как мы нажмем на вкладку, отобразится конкретное представление списка.

person Vaddi    schedule 14.09.2012
comment
Я не понимаю, что вы имеете в виду. Вы имеете в виду, что я должен добавить значки панели действий для этих действий при нажатии на элемент в ListView? Это не то, чего я хочу добиться. - person zeiger; 14.09.2012
comment
Вы имеете в виду, что хотите добавить контекстное меню под каждым элементом в виде списка? - person Vaddi; 14.09.2012
comment
Да, мне нужно добавить контекстное меню под каждым пунктом - person zeiger; 14.09.2012