2009-10-22 7 views
11

Ich habe eine ListView mit Elementen mit Informationen über Orte mit einer Bewertung und die Entfernung an den aktuellen Speicherort.Android: benutzerdefinierte Trennzeichen (oder sogar Element) in ListView abhängig von Inhalt des Elements

Die Elemente werden in Gruppen sortiert:

  • Gruppe 1: 500m
  • Gruppe 2: 500 - 1 km
  • Gruppe 3: 1km - 1,5 km
  • ...

Mit diesen Gruppen werden die Artikel nach ihrer Bewertung sortiert.

Jetzt habe ich diese Artikel über meinen benutzerdefinierten Adapter (Erweiterung von BaseAdapter) in die ListView, die perfekt funktioniert.

Allerdings möchte ich ein Trennzeichen vor jedem ersten Element jeder Gruppe platzieren. Dieser Separator kann ein TextView sein, der z.B. 500m - 1km gefolgt von allen ListView Elementen in dieser Gruppe.

Irgendeine Idee, wie man das realisiert?

Antwort

19

Here is one implementation das genau das tut, was Sie beschreiben.

Das ist GPLv3, weil es von this implementation abgeleitet ist, die GPLv3 war.

Sie können auch meine MergeAdapter dafür verwenden, was den Vorteil hat, Apache License 2.0 zu sein. Geben Sie ihm einfach einen alternierenden Satz von Kopfzeilen TextView s und Adapter s, die den Inhalt jedes Abschnitts enthalten.

Oder Sie können alle diese Punkte betrachten und ihr Verhalten in Ihre vorhandene Adapter-Klasse rollen. Der Trick besteht darin, Ihre TextView-Header an der richtigen Stelle zurückzugeben und Methoden wie getViewTypeCount(), getItemViewType(), areAllItemsEnabled() und isEnabled() ordnungsgemäß zu implementieren.

+0

Haben Sie Screenshots? – Tawani

+0

Es gibt einen Screenshot des ersten in meinem Advanced Android Buch. Es gibt einen Screenshot des zweiten auf Jeff Sharkes Website, wie oben verlinkt. Ich habe sowieso keinen Screenshot von dem dritten, zum großen Teil, weil es kein Screenshot von MergeAdapter wäre, sondern ein Screenshot von allem, was Sie in MergeAdapter gegossen haben. – CommonsWare

+0

Ihre Implementierung von SectionedAdapter funktioniert wunderbar. Vielen Dank! Eine kurze Frage: Gibt es eine Möglichkeit, den unteren Teiler vom letzten Listenelement jedes Abschnitts zu entfernen? – jeffh

4

Hier ist noch schönere Umsetzung, inspiriert von iOS Abschnitt Listenansicht: http://code.google.com/p/android-section-list/. Das Negative daran ist, dass die Abschnittsüberschrift sichtbar bleibt, auch wenn Sie den Abschnitt nach unten scrollen.