Есть ли веская причина для заголовка ListView занять позицию? - PullRequest
8 голосов
/ 27 октября 2010

Я только что добавил заголовок в свой ListView, и мне нужно изменить кучу кода, потому что заголовок по существу становится позицией 0 (это означает, что индексы Cursor моего CursorAdapter не совпадают с указателями списка. на 1 сейчас). Зачем? Это кажется мне немного глупым.

Единственная причина, по которой я могу придумать, заключается в том, что разработчик может захотеть получить доступ к заголовку. Хорошо. Предоставьте что-то вроде getListView (). GetHeader ().

Ответы [ 2 ]

22 голосов
/ 15 июля 2012

По какой-то причине position (из onItemClick) связано с количеством элементов в ListView (, а не с адаптером ), включая верхние и нижние колонтитулы.Когда вы устанавливаете OnItemClickListener, вы должны получить выбранный элемент, вызвав listView.getItemAtPosition(position) вместо adapter.getItem(position).

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

И если вы не хотите, чтобы ваш заголовок можно было выбирать, вы должны добавить его следующим образом:listView.addHeaderView(headerView, null, false).

1 голос
/ 27 октября 2010

Я считаю, что ListView - это не более чем список View элементов. Если вы добавите верхний колонтитул (или нижний колонтитул в этом отношении, это не должно иметь никакого значения) к вашему ListView, этот элемент в основном ничем не отличается от любого из других элементов, которые добавляются автоматически через ListAdapter. Единственное незначительное отличие состоит в том, что элемент заголовка (и нижнего колонтитула) будет фиксированным и не будет зависеть от того, что ListAdapter делает со списком - хотя они по-прежнему не более чем обычные элементы.

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