Wie bekomme ich die Ansicht eines ListView-Elements?

8

Ich habe zwei ListViews (A und B) mit Elementen des gleichen Typs (eine Klasse, die ich erstellt habe)

Wenn ich auf ein Objekt von A klicke, fügt es dieses Objekt auf B hinzu und wenn ich erneut klicke, wird es entfernt. Nur wenn ein Element ausgewählt ist, ändere ich seinen Hintergrund mit view.setBackgroundColor (myColor).

Ich möchte das Objekt aus der Liste B entfernen können (es funktioniert), aber ich möchte auch die Hintergrundfarbe zurücksetzen. Ich kann nicht herausfinden, wie ich den Blick auf diesen Gegenstand bekomme, den ich entferne.

Irgendwelche Ideen?

    
Lucas 25.03.2011, 13:53
quelle

3 Antworten

10

Es gibt keine Garantie, dass ein bestimmtes ListView-Objekt zu einem bestimmten Zeitpunkt überhaupt eine Ansicht enthält. Wenn das Objekt derzeit nicht auf dem Bildschirm angezeigt wird, verfügt es möglicherweise nicht über eine Ansicht. Da ein bestimmtes Objekt möglicherweise keine Ansicht hat, macht es möglicherweise keinen Sinn, die Ansicht des Objekts zu sehen.

Darüber hinaus werden Sie aufgrund der Art und Weise, wie ListView Ansichten erstellt und wieder verwendet, einige seltsame, unerwünschte Effekte sehen, wenn Sie die Ansichten einfach direkt ändern. Wenn der Benutzer durch die Liste scrollt, werden Elemente, die sichtbar werden, fälschlicherweise mit denselben Hintergründen enden wie andere Elemente, die außerhalb des sichtbaren Bereichs liegen.

Ich weiß nicht, ob das, was folgt, der beste Weg ist, um Ihre Funktionalität zu implementieren, weil ich die Kosten für den Wiederaufbau der Liste nach einer Änderung nicht kenne. Hier ist die (wahrscheinlich naive) Art, wie ich das tun würde:

  1. Fügen Sie Ihrem Datenobjekt ein weiteres boolesches Element hinzu, etwa isInSecondList .
  2. Überschreibe getView() im Adapter. Setzen Sie in getView() den Hintergrund auf normal oder hervorgehoben, abhängig vom Wert des isInSecondList des Elements.
  3. Wenn ein Element zur zweiten Liste hinzugefügt oder aus der zweiten Liste entfernt wird, aktualisieren Sie das Datenobjekt, um die Änderung widerzuspiegeln, und rufen Sie dann das notifyDataSetChanged() des Adapters auf.
erichamion 25.03.2011, 17:28
quelle
5
%Vor%     
ngocquynh_183 25.05.2013 05:03
quelle
0

Hier ist, was ich getan habe

%Vor%     
nvinayshetty 15.10.2014 09:43
quelle

Tags und Links