Wednesday 8 March 2017

Android Erweiterbare Listenansicht Group Indicator Forex

Ausblenden von Gruppen-Indikatoren für leere Gruppen Ein weiteres Thema, das auf diesem Blog zurückkehrt, ist die erweiterbare Listenansicht. Es scheint, dass diese lästigen erweiterbaren Listen immer einige Überraschungen auf Lager haben. Diesmal lief ich in die Frage der Gruppenindikatoren und leeren Gruppen. Gruppenindikatoren sind die kleinen Pfeile vor den Gruppenzeilen, die angeben, ob die Gruppe expandiert oder zusammengefallen ist. Problem ist, dass diese Indikatoren immer sichtbar sind, auch wenn die Gruppe leer ist. Dies löst Benutzer, die denken, dass sie die Gruppe erweitern können. Die Gruppe dehnt sich zwar aus, aber da sie leer ist, erscheinen keine Kinderzeilen, die extrem ärgerlich sein können. Einige Internet-Quellen schlagen Zauberei mit der Variable ziehbar, dass die Gruppe Indikator zurück. Wenn Sie dem Rat folgen, verschwindet die Gruppenanzeige für alle zusammengeklappten Gruppen (auch für diejenigen, die untergeordnete Zeilen haben). Dieses überraschende Verhalten ist durch Design. Kommentar in der Quelle der ExpandableListView sagt: Wenn die Gruppe zusammengebrochen ist, so betrachten wir es leer aus Performance-Gründen. Die Methode, in der dieses Verhalten verkabelt wird, ist privat, es ist nicht möglich, es durch Subclassing ExpandableListView zu überladen. Glücklicherweise ist die Lösung sehr einfach, auch wenn ein bisschen heikel. Wir werden die Gruppenindikatorlogik in ExpandableListView vollständig deaktivieren und unser eigenes Indikator vom Adapter zur Verfügung stellen, der die erweiterbare Liste unterstützt. Die Gruppenanzeige ist deaktiviert, indem sie auf eine transparente Farbe in main. xml gesetzt wird. Dann überschreiben wir getGroupView im Adapter (diesmal war es ein SimpleExpandableListAdapter aber die Methode funktioniert für jeden Adapter). Wir mussten manuell ein ImageView in das Gruppenlayout einfügen - dies wird normalerweise automatisch von ExpandableListView durchgeführt, aber wir haben diese Funktion deaktiviert. Sobald getGroupView die Gruppenzeile zurückgibt, manipulieren wir die ImageView, die als Gruppenindikator fungiert, unter Berücksichtigung der untergeordneten Anzahl für die Gruppe neben ihrem expandierten kollabierten Zustand. Dies bedeutet leider, dass Sie benutzerdefinierte expandedcollapsed Icons in Ihrem Programm haben - die Icons sind extrem hässlich in das Beispielprogramm, lasse ich es Ihnen als Hausaufgaben zu verschönern. 16 Kommentare: I39m ein Community-Führer auf einem Netzwerk von Entwickler-Websites. 160Ich mochte Ihren Bloginhalt wirklich und dachte, Sie könnten an einer zusätzlichen Exposition auf unseren Seiten interessiert sein. 160Send mir eine E-Mail an ross bei dzone dot com und ich kann alle Details erklären. Hey kann mir helfen. Ich bin nicht in der Lage, das Gruppen-Symbol in einer der erweiterbaren Liste zu sehen. Was milde wäre das problem. Basiert auf StrayPointers Antwort und den Code aus dem Blog, können Sie den Code noch mehr zu vereinfachen: In Ihrem xml fügen Sie folgend ExpandableListView: Dann im Adapter Sie die folgenden: Mit der Methode setImageResource Sie Erhalten sie alle getan mit einem Einzeiler. Sie benötigen nicht die drei Integer-Arrays in Ihrem Adapter. Sie brauchen auch keinen XML-Selektor für den Status expanded und collapsed. Alles erfolgt über Java. Darüber hinaus zeigt dieser Ansatz auch das richtige Kennzeichen an, wenn eine Gruppe standardmäßig erweitert wird, was nicht mit dem Code aus dem Blog funktioniert. Beantwortet Jul 10 12 at 15:29 Wo kann ich diesen Code anwenden ndash Karthik Dies ist gemeint, in der getGroupView () - Methode Ihrer BaseExpandableListAdapter Umsetzung verwendet werden. Sehen Sie sich diese Beispielimplementierung an. Ndash jenzz 26 September at 11:34 1 für ur Antwort Jeans habe ich schon durch die Verbindung thnx gegangen. Ndash Karthik jenzz Was ist der quotindicatorquot ndash IBunny Jan 24 14 um 6:44 jenzz wo ist eine magische Variable quotindicatorquot ndash Joseph Apr 17 14 am 17:01 Wie in einer anderen Antwort erwähnt, da Android behandelt eine Nicht expandierte Listengruppe als leer, wird das Symbol nicht gezeichnet, auch wenn die Gruppe Kinder hat. Grundsätzlich müssen Sie die Voreinstellung als transparent ziehen lassen, verschieben Sie das Ziehen in Ihre Gruppenansicht als ImageView und verschieben Sie das Bild in Ihrem Adapter. Sie erstellen einfach ein neues xml-Layout mit height0 für den verborgenen Gruppenkopf. Zum Beispiel, seine grouplistitemempty. xml Dann ist Ihre normale Gruppe Header-Layout yourgrouplistitemfile. xml Schließlich aktualisieren Sie einfach die getGroupView-Methode in Ihrer Adapter-Klasse: WICHTIG. Das Root-Tag der Layoutdateien (versteckt und normal) muss unterschiedlich sein (wie oben Beispiel LinearLayout und RelativeLayout). Ausblenden von Gruppenindikatoren für leere Gruppen Ein weiteres Thema, das auf diesem Blog zurückkehrt, ist die erweiterbare Listenansicht. Es scheint, dass diese lästigen erweiterbaren Listen immer einige Überraschungen auf Lager haben. Dieses Mal lief ich in die Frage der Gruppenindikatoren und leeren Gruppen. Gruppenindikatoren sind die kleinen Pfeile vor den Gruppenzeilen, die angeben, ob die Gruppe expandiert oder zusammengefallen ist. Problem ist, dass diese Indikatoren immer sichtbar sind, auch wenn die Gruppe leer ist. Dies löst Benutzer, die denken, dass sie die Gruppe erweitern können. Die Gruppe dehnt sich zwar aus, aber da sie leer ist, erscheinen keine Kinderzeilen, die extrem ärgerlich sein können. Einige Internet-Quellen schlagen Zauberei mit der Variable ziehbar, dass die Gruppe Indikator zurück. Wenn Sie dem Rat folgen, verschwindet die Gruppenanzeige für alle zusammengeklappten Gruppen (auch für diejenigen, die untergeordnete Zeilen haben). Dieses überraschende Verhalten ist durch Design. Kommentar in der Quelle der ExpandableListView sagt: Wenn die Gruppe zusammengebrochen ist, so betrachten wir es leer aus Performance-Gründen. Die Methode, in der dieses Verhalten verkabelt wird, ist privat, es ist nicht möglich, es durch Subclassing ExpandableListView zu überladen. Glücklicherweise ist die Lösung sehr einfach, auch wenn ein bisschen heikel. Wir werden die Gruppenindikatorlogik in ExpandableListView vollständig deaktivieren und unser eigenes Indikator vom Adapter zur Verfügung stellen, der die erweiterbare Liste unterstützt. Die Gruppenanzeige ist deaktiviert, indem sie auf eine transparente Farbe in main. xml gesetzt wird. Dann überschreiben wir getGroupView im Adapter (diesmal war es ein SimpleExpandableListAdapter aber die Methode funktioniert für jeden Adapter). Wir mussten manuell ein ImageView in das Gruppenlayout einfügen - dies wird normalerweise automatisch von ExpandableListView durchgeführt, aber wir haben diese Funktion deaktiviert. Sobald getGroupView die Gruppenzeile zurückgibt, manipulieren wir die ImageView, die als Gruppenindikator fungiert, unter Berücksichtigung der untergeordneten Anzahl für die Gruppe neben ihrem expandierten kollabierten Zustand. Dies bedeutet leider, dass Sie benutzerdefinierte expandedcollapsed Icons in Ihrem Programm haben - die Icons sind extrem hässlich in das Beispielprogramm, lasse ich es Ihnen als Hausaufgaben zu verschönern. 16 Kommentare: I39m ein Community-Führer auf einem Netzwerk von Entwickler-Websites. 160Ich mochte Ihren Bloginhalt wirklich und dachte, Sie könnten an einer zusätzlichen Exposition auf unseren Seiten interessiert sein. 160Send mir eine E-Mail an ross bei dzone dot com und ich kann alle Details erklären. Hey kann mir helfen. Ich bin nicht in der Lage, das Gruppen-Symbol in einer der erweiterbaren Liste zu sehen. Was Milben wäre das Problem. Digging tiefer in ExpandableListView Ich stieß auf eine andere seltsame API-Design-Problem. Dieses ist über ExpandableListView Gruppenindikatorbilder. Diese Bilder werden auf der linken Seite einer Gruppenzeile in der Liste angezeigt. Wie der Name andeutet, geben sie an, ob die Gruppe expandiert oder zusammengebrochen wird. Offensichtlich kann es zwei verschiedene Bilder hier und Android unterstützt es. Sie können einen XML-Ziehwähler (setGroupIndicator (Drawable groupIndicator)) mit zwei Zuständen schreiben: stateempty für collapsed und stateexpanded für eine expandierte Gruppe. Nun, was ist auch offensichtlich für mich ist die Tatsache, dass zwei Bilder können zwei verschiedene Größen, rechts Anscheinend ist es nicht so offensichtlich für Menschen, die diesen Teil der Android-API entworfen. Sie können zwei verschiedene Bilder für zwei verschiedene Gruppenzustände haben, aber8230 werden beide Bilder auf die von ExpandableListView 8216s setIndicatorBounds (int left, int right) festgelegte Größe gedehnt. Welche Optionen Sie haben Sie können Indikatorgrenzen festlegen (über setIndicatorBounds (int links, int rechts)), um ein breiteres Ihrer beiden Bilder anzupassen und die Unterschiede mit dieser Art von Selektor zu kompensieren: Im obigen Beispiel ist das erweiterte Bild ein breiteres, So kompensieren wir 20dp in android: richtige Koordinate des kollabierten Bildes. Wie Sie sehen können, gibt es auch einige Muster oberen und unteren Ränder für beide Bilder. Zweite Möglichkeit ist, Ihre Bilder zu einem 9-Patch-es konvertieren, sorgfältig auswählen dehnbar und nicht dehnbar Teile. Da es sich um die Bildbearbeitung von Hand handelt, halte ich diese Lösung für unpraktisch. Sie können auch Ihr Kennzeichen in Selektionselementen auf Null setzen und Ihre Indikatoransichten in XML-Zeilenlayouts einfügen. Sie müssen einen benutzerdefinierten ExpandableListAdapter schreiben und nach dem Aufblasen dieser Elemente aus Ihrem Zeilenlayout in der getGroupView-Implementierung Anzeigenindikatoransichten anzeigen. Haven8217t es noch getestet, aber dies sieht aus wie die beste Lösung. Graben Sie dieses nutzlose Merkmal der Gruppenindikatoren und tun Sie es Ihre Weise.


No comments:

Post a Comment