Wie bekomme ich Sticky / Pinned Header in einer ExpandableListView?

8

Hat jemand Glück gehabt, PinnedHeaderListView so anzupassen Es kann mit einer ExpandableListView statt nur einer einfachen ListView mit indizierten Sektionen verwendet werden? Ich möchte grundsätzlich ein ExpandableListView , bei dem jede Gruppenelementansicht nach oben fixiert bleibt, bis sie von der nächsten Gruppenansicht nach oben geschoben wird.

Ich habe den Code untersucht, um herauszufinden, wie PinnedHeaderListView funktioniert, und es scheint, als sei es schwierig, sich an ein ExpandableListView anzupassen. Das Hauptproblem scheint in der Verwendung einer anderen Art von Adapter- und Zeichnungsmethodologie zu liegen. A PinnedHeaderListView verwendet SectionIndexer , um die Position von Abschnitten zu verfolgen. Beim Zeichnen jedes Elements mit getView() wird geprüft, ob das Element der Anfang eines neuen Abschnitts ist. Wenn der Artikel der Anfang eines neuen Abschnitts ist, wird ein Abschnittskopf in der list_item -Ansicht des Elements sichtbar gemacht. Ein ExpandableListAdapter hat ein getChildView() und ein getGroupView() , um die Elemente und Abschnitte getrennt als unterschiedliche Listenelemente zu zeichnen.

Ich bin mir sicher, dass es einen Weg geben muss, die Methode in PinnedHeaderListView zu verwenden, um ein ähnliches Verhalten in ExpandableListView zu erhalten, aber ich bin mir nicht sicher, wo ich anfangen soll.

    
joecan 06.06.2011, 06:35
quelle

2 Antworten

4

Ich konnte gepinnte Header bekommen, die auf ExpandableList1 APIdemo .

Das schwierigste Problem, mit dem ich konfrontiert war, war herauszufinden, wie man den SectionIndexer dazu bringt, gut mit expandierenden Listen zu spielen. Wie in meiner Frage bewiesen wurde, dachte ich darüber alles falsch. In meinem ursprünglichen Versuch, dieses Problem zu lösen, habe ich ein SectionIndexer-Objekt in MyExpandableAdapter erstellt und es meinen Daten zugeordnet, ähnlich wie es in der App "Kontakte" und in Peters Beispiel geschieht. Dies funktioniert in der App "Kontakte", da die Positionen der flachen Liste statisch mit dem Datensatz übereinstimmen. In einer erweiterbaren Listenansicht ändern sich die flachen Listenpositionen, wenn Gruppen ein- und ausgeblendet werden.

Die Lösung besteht also darin, den Abschnittsindexer nicht den Daten, sondern der Instanz Ihrer ExpandableListView zuzuordnen. Mit dieser Lösung benötigen Sie nicht einmal ein SectionIndexer-Objekt, wie es in den Beispielen verwendet wird. Sie müssen die Implementierungsmethoden von SectionIndexer nur um die ExpandableListView-Methoden wie folgt umbrechen:

%Vor%

Es gibt natürlich noch andere Änderungen, die Sie vornehmen müssen, damit alles funktioniert, aber die oben genannten Methoden sind der Schlüssel. Ich poste den vollständigen Code auf Google Code oder Github und verlinke von hier bald. ExpandableLists mit angehefteten Headern sehen gut aus!

    
joecan 08.06.2011, 18:26
quelle
2

Nun, ich habe in nur 3 Schritten getan:

1. Fügen Sie compile 'com.diegocarloslima:fgelv:0.1.+@aar' in build.gradle

hinzu

2. Fügen Sie ExpandableListView in xml hinzu.

%Vor%

3. Java-Code:

%Vor%

Hoffe, das wird dir helfen.

    
Hiren Patel 17.05.2016 12:03
quelle