Frage

Ich habe eine ListView unterstützt durch angepassten ArrayAdapter, wo jedes Element hat 2 LinearLayouts - man nenne ich den Kopf, und der andere - Körper.Der Körper ist ausgeblendet (Weg), bis der Benutzer klickt auf die Zeile, zu welcher Zeit es Folien aus.Der zweite Klick (auf den Kopf) werden verstecken der Leiche.Allerdings, wenn Benutzer klickt auf den Körper, es bringt eine andere Aktivität.All dies funktioniert gut, hier kommt das problem:

Wenn der Benutzer drückt auf Körper ich will eine visuelle Anzeige, die Aktion auf die gleiche Weise wie normale Liste-item-flicker orangefarbenem hintergrund, wenn Sie gedrückt werden.Ich bin nicht immer diese Standard seit (meine Theorie) die onPress-Ereignis abgefangen wird, durch den Körper sieht und nicht verarbeitet, indem Sie das Listenelement.

Das erste, was ich versuchte, war zu führen body.setBackground('#ff00ff') (never mind the color) in der onPress-Ereignis.Das hat nicht funktioniert, da (ich vermute,) es gibt keine repainting nach dem Aufruf.Dann habe ich Grabe ein bisschen mehr und beschlossen, <selector/>-basierten hintergrund.Ich definierte body_background.xml in drawable Ordner und zugeordnet werden, dass der Körper die background-Eigenschaft.

Dort bemerkte ich, dass der hintergrund nur dann ändern, wenn das selbst ist verarbeitet durch die Liste.Zum Beispiel, wenn ich <item android:state_selected="true" android:drawable="@drawable/selected"/> wenn ich dann drücken Sie auf den Kopf - der hintergrund der beiden Elemente (Kopf und Körper), wird sich allerdings ändern, wenn ich drücken Sie auf Körper - nichts.

Um es zusammenzufassen, meine Frage - wie ändere ich hintergrund des untergeordneten Elements in der Liste Element, wenn ich zuweisen einer benutzerdefinierten onClick-handler es?Alle Hinweise werden sehr geschätzt

War es hilfreich?

Lösung

OK.Hier einige weitere Infos, die ich Graben entlang der Weg.

  1. Ich bin derzeit versuchen zu switch-Implementierung, um ExpandableListView bietet die Funktionalität, die ich hatte, um in codiert (Schiebe-Körper).Das problem kann ich hier habe, ist, dass ich eine fancy "endlosen" Liste der Umsetzung und ich bin mit ArrayAdapter#add-Methode, um dynamisch Elemente hinzufügen, um der Liste beim scrollen (siehe meine tutorial androidguys.com) Die add Methode fehlt BaseExpandableListAdapter also muss ich sehen, ob das hinzufügen von Elementen der internen Arrays arbeiten (es hat nicht für ArrayAdapter) möglicherweise tun ExpandableListView#notifyChanged() wird sich darum kümmern
  2. Die Tatsache, dass ich sehe nichts, wenn ich direkt mit setBackgroundColor Methode ist wahrscheinlich durch den folgenden Aufruf startActivity rufen, dass die gesamte Malerei, bis eine neue Aktivität wird angezeigt

P. S.dieser Fehler wurde behoben, durch den Wechsel zu ExpandableListView.Und kann ich noch hinzufügen - es ist wunderschön!Keine Notwendigkeit, etwas zu erfinden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top