2010-03-06 3 views
6

Ich möchte eine ListView generieren, die einige Teiler zwischen einigen der Einträge hat, wie es in einigen der Eigenschaftenabschnitte zu sehen ist. Siehe das Beispiel unten. Ich versuche, eine List zu generieren, die aus einigen Textansichten gefolgt von einem der ausgefallenen Teiler besteht, die den nächsten Teil der Liste und dann wieder einige Textansichten erklären. Wie kann das gemacht werden? Ich habe überlegt, verschiedene Ansichten zu erstellen, um sie der Liste hinzuzufügen. Ist das der Weg zu gehen?Wie generiert man eine ListView mit Kopfzeilen über einigen Abschnitten?

+1

Wenn Sie etwas erstellen, das dem Screenshot sehr ähnlich ist, können solche Bildschirme sehr einfach mit android.preference.PreferenceActivity erstellt werden. Die Teiler werden mit dem Attribut android: title des PreferenceCategory-Elements in den von diesem geladenen XML-Einstellungen erstellt. Allerdings nicht als Antwort, da ich in diesem Fall nicht von einer eigenen ListView spreche. Es handhabt das für Sie. –

Antwort

10

für android.widget.ExpandableListView suchen ich eine Lösung. Ich weiß nicht, ob es das Beste ist.

Ich verwende einen benutzerdefinierten Adapter abgeleitet von ArrayAdapter für die Liste wie in diesem tutorial beschrieben. In der Adapterklasse überprüfe ich, ob die Position in der getView-Methode eine normale Zeile ist, dann blende ich das Zeilenlayout auf. Wenn es sich um die erste Zeile einer neuen Gruppe handelt, blähe ich ein Überschriften-Layout auf, das eine normale Zeile plus die Gruppenüberschrift darüber ist.

Wenn Sie die Kopfzeile nicht in eine Ihrer Zeilen mischen möchten. Berücksichtigen Sie die folgende Lösung:

Sie können die beiden Methoden getItemViewType und getViewTypeCount überschreiben. Sie haben jetzt eine Liste, die verschiedene Zeilen anzeigen kann. Sie müssen den erwarteten Ansichtstyp für das Element in der getView-Methode überprüfen und abhängig davon unterschiedliche Layouts aufblasen.

Die Liste wird das Recycling für Sie so behandeln, dass es nur korrekte Recycle-Ansichten an Ihre getView-Methode zurückgibt, dh wenn recycleView nicht null ist, kann es zur Anzeige Ihrer aktuellen Zelle verwendet werden.

1
+0

Ich denke, die erweiterbare Liste ist eher wie eine Baumansicht. Wie hier zu sehen: http: //mylifewithandroid.blogspot.com/2008/05/expandable-lists.html – Janusz

+0

Es ist eine zweistufige Liste. Ich denke, es könnte dazu verleitet werden, wie Ihr Beispiel auszusehen, indem Sie die Einträge der obersten Ebene als die großen orangefarbenen Einträge in Ihrem Beispiel verwenden. Jetzt, da ich mir mehr Gedanken gemacht habe, denke ich, dass das eine hässliche Lösung sein könnte. –

3

Sie können meine SectionedAdapter verwenden, wenn GPLv3 akzeptabel ist (auf diese Weise lizenziert aufgrund einiger Upstream-Code). Sie können meine MergeAdapter verwenden, wenn Sie etwas flexibler und mit einer weniger einschränkenden Lizenz (Apache 2) benötigen.

+0

Ich habe einfach alles, was ich brauchte, mit MergeAdapter implementiert. Es ist genau das, wonach ich gesucht habe! Danke, Mark (hilfreich wie immer). –

0

Ich bin auch an einer Antwort darauf interessiert. Es muss einen einfacheren Weg geben, dies zu tun.

Beim Betrachten des Adapters gibt es eine Methode, Adapter.getItemViewType (int position).

ListView definiert einen Rückgabewert, ITEM_VIEW_TYPE_HEADER_OR_FOOTER, der angibt, ob das zurückgegebene Element eine Kopf- oder Fußzeile ist.

Ich habe es nicht versucht, aber ich nehme an, wenn Sie Ihren eigenen Adapter erstellen und ein Element mit dem Typ zurückgeben, der angibt, dass es eine Kopf- oder Fußzeile ist, wird das ListView es entsprechend anzeigen.

+0

Ich denke, dass Kopf- und Fußzeile nur für Kopf- und Fußzeilenansichten verwendet werden. Diese Ansichten befinden sich oberhalb und unterhalb der Liste. – Janusz

Verwandte Themen