ContextMenu для пустого места в Android ListView

Есть ли способ получить всплывающее контекстное меню, когда пользователь долго нажимает на пустое место в списке? Я знаю, что это можно сделать, установив wrap_content в параметр layout_height списка. На самом деле я делал это успешно в течение некоторого времени. Однако иногда этот wrap_content ведет себя очень странно, и хотя на экране достаточно места, список ограничивается % экрана, и элементы прокручиваются в пределах этого пространства. Чтобы избежать этой проблемы, я перешел к установке высоты как 0dp и веса как 1. Однако это нарушило функциональность, которую я имел с точки зрения долгого нажатия на пустую область списка, чтобы добавить новый элемент в список. Любая помощь будет оценена.

Примечание. Сегодня я просмотрел несколько похожих вопросов на SO в течение дня, но не смог найти убедительного и элегантного решения.


person Sriman    schedule 27.05.2013    source источник


Ответы (1)


Вы можете использовать ListView#addHeaderView() или ListView#addFooterView(), чтобы добавить дополнительное представление вверху или внизу ListView, чтобы оно выглядело как пустое пространство. Также я предлагаю вам использовать match_parent для атрибута layout_height ListView.

person Daniel Chow    schedule 27.05.2013
comment
Допустим, у меня есть 3 элемента в представлении списка, как нижний колонтитул будет динамически и автоматически занимать оставшееся пространство на экране? - person Sriman; 27.05.2013
comment
@Sriman В этом случае представление нижнего колонтитула похоже на 4-й элемент (он всегда помещается в конец списка). - person Daniel Chow; 27.05.2013
comment
ты прав. но как я могу заставить нижний колонтитул автоматически занимать оставшееся место на экране? Любые идеи по этому поводу? - person Sriman; 27.05.2013
comment
@Sriman Есть несколько случаев. 1. элементов немного, поэтому на экране остается много места; 2. элементов так много, что их невозможно заполнить на экране, приходится его прокручивать; 3. есть несколько предметов, на экране мало места. Интересно, что именно вы хотите в этой ситуации, не могли бы вы предоставить более подробную информацию? - person Daniel Chow; 27.05.2013
comment
В случаях 1 и 3 я хочу, чтобы нижний колонтитул занимал все оставшееся место на экране, не занятое списком. В случае 2 я вообще не хочу нижний колонтитул. - person Sriman; 27.05.2013
comment
@Sriman Если в случае 2 вам не нужен нижний колонтитул, значит ли это, что пользователь не может долго нажимать, чтобы добавить новый элемент в случае 2? Это немного противоречиво по сравнению со случаями 1 и 3. Что, если оставшееся пространство составляет всего 10 dp, а предмет — 30 dp? ListView по-прежнему будет прокручиваться. Если вы не хотите добавлять новый элемент, когда элементы могут занимать весь экран, я думаю, что использование LinearLayout, а не ListView, может дать вам больше возможностей для настройки. Извините, что не нашел подходящего решения. :п - person Daniel Chow; 28.05.2013
comment
У меня уже есть контекстное меню, определенное для списка. У этого есть множество опций, таких как редактирование элемента, удаление элемента, кроме добавления нового элемента. Поэтому, когда элементов достаточно для заполнения экрана, мне не нужен нижний колонтитул. - person Sriman; 28.05.2013