Android: пользовательский разделитель (или даже элемент) в ListView, зависящий от содержимого элемента

У меня есть ListView с элементами, содержащими информацию о местах с рейтингю и расстоянием в текущем местоположении.

Элементы сортируются по группам:

  • Группа 1: в пределах 500 м
  • Группа 2: 500 м - 1 км
  • Группа 3: 1 км - 1,5 км
  • ...

С этими группами элементы сортируются по их рейтингу.

Теперь я поместил эти элементы через свой пользовательский адаптер (расширение BaseAdapter) в ListView, который отлично работает.

Однако то, что я хотел бы сделать, это поставить разделитель перед каждым первым элементом каждой группы. Этот разделитель может быть TextView, например, например. 500 м - 1 км, за которым следуют все элементы ListView в этой группе.

Любая идея о том, как это реализовать?

Ответы

Ответ 1

Вот одна реализация, которая делает именно то, что вы описываете.

Это GPLv3, потому что он получен из этой реализации, который был GPLv3.

Вы также можете использовать мой MergeAdapter, который имеет то преимущество, что он является Apache License 2.0. Просто передайте ему чередующийся набор заголовков TextView и Adapter, содержащий содержимое каждого раздела.

Или вы можете заглянуть во все это и перевернуть свое поведение в существующий класс Adapter. Трюк состоит в том, чтобы вернуть заголовки TextView в нужное место и правильно реализовать такие методы, как getViewTypeCount(), getItemViewType(), areAllItemsEnabled() и isEnabled().

Ответ 2

Вот еще более приятная реализация, вдохновленная списком из списка разделов iOS: http://code.google.com/p/android-section-list/. Дело в том, что заголовок раздела остается видимым, даже если вы прокручиваете раздел вниз.