getChildView wird nicht aufgerufen

8

Ich mache ein Menü, das einen benutzerdefinierten ExpandableListView-Adapter enthält. Obwohl ich versuche, meinen Code so nah an die API-Beispiele und andere Beispiele zu bringen, die ich online gesehen habe (einschließlich mehrerer eng verwandter SO-Fragen), kann ich immer noch nicht funktionieren.

Ich weiß, dass der Adapter verwendet wird, weil die Gruppenansicht angezeigt wird (die aus einer XML-Datei besteht). Das Klicken auf das Gruppenelement ruft auch "getGroupView" auf, aber der Code führt niemals "getChildView", "getChild" oder "getChildId" aus.

Ich habe sogar den Android-15-Quellcode durchsucht, um herauszufinden, was ich falsch gemacht habe, aber es ist nichts Ungewöhnliches passiert.

= Basisaktivität

%Vor%

= Erweiterbarer Listenansicht-Adapter

%Vor%

= XML-Ansicht der Aktivität

%Vor%

= m_backdrop.xml (Menü für die Hintergrundeinstellung)

%Vor%

= face_info.sw.xml (Die Datei face_info.xml ist die gleiche, aber ohne den Schalter)

%Vor%

Auch ohne den "ColorPickerMenuView" -Teil in der face_info_sw.xml wird die untergeordnete Ansicht immer noch nicht aufgerufen. Ich habe auch versucht, das Relative Layout selbst zu haben, anstatt in einer Bildlaufansicht, aber das verhinderte, dass weitere hinzugefügte Elemente gescrollt wurden (und auch, dass benutzerdefinierte Steuerelemente seltsame Größen haben).

Jede Hilfe, um das zu lösen, wäre großartig. Wenn jemand eine gepackte Quelle dafür (Eclipse-kompatibel) benötigt, wie in den Kommentaren und ich werde mit einem Link antworten.

    
Zyphuris55 27.03.2013, 03:12
quelle

2 Antworten

6

Schade, dass niemand dies beantworten konnte ... aber glücklicherweise konnte ich eine Lösung für dieses Problem finden, so dass andere da draußen erweiterbare Listenansichten zu ihren Fragmenten hinzufügen können.

Ich habe die Lösung gefunden, als ich den Quellcode für den Spinner auscheckte (weil ich ein Spinner mit benutzerdefinierten Einträgen machen wollte). Der Schlüsselpunkt in dem Code war in "onMeasure", wenn es alle seine Kinder misst ... nun, bis zu einer vordefinierten Grenze von 15, aber die Messung der Kinder ist der Hauptpunkt.

= Lösung = Wenn Sie Ihren Adapter erstellen, müssen Sie Ihre übergeordnete Ansicht übergeben. Dies ist der Schlüssel, weil es die einzige Verbindung ist, die Sie von dem Adapter aus haben (nur ein einfacher Weg).

%Vor%

Als nächstes, in Ihrem "getGroupView", weil das das einzige Ding zu sein scheint, das üblicherweise aufgerufen wird, müssen Sie den folgenden Code hinzufügen:

%Vor%

Der Schlüsselteil im obigen Code ist die "measureChildrenHeight", die "convertView.getMeasuredHeight ()" dient nur dazu, den ELV wiederherzustellen, wenn er kollabiert ist. Der Code für die Kennzahl für Kinder lautet wie folgt:

%Vor%

Hinweis: Ich musste den Code anpassen, um die Höhe des letzten Elements auszuschließen, da unterhalb des letzten Elements mehr Platz war. Wenn Sie Kinder unterschiedlicher Größe haben, könnte es Probleme geben. Ich bekomme immer noch etwas Platz unterhalb der Kinder / Gruppen-Kopfzeile, aber es ist entschuldbar (anders als die vorherige Menge, die 3-4 Kinder groß war).

    
Zyphuris55 31.03.2013, 08:05
quelle
17

Das Problem ist, dass Ihre ExpandableListView in einer ScrollView ist. Dies ist meistens das Ergebnis von schlechten Layouts, und Sie sollten versuchen, es zu vermeiden.

Aber manchmal ist es die einzige Lösung (das ist eigentlich nicht wahr, aber andere Lösungen könnten außerhalb des Geltungsbereichs liegen). Ihre Lösung funktioniert auch, ist aber ein bisschen komplex. Schreiben Sie stattdessen eine benutzerdefinierte ExpandableListView wie folgt:

%Vor%

und in Ihrer m_backdrop.xml:

%Vor%

Das ist schon alles. Es sollte wie erwartet funktionieren.

    
Julian Liebl 19.08.2014 14:37
quelle