Ich habe eine GridView in Android, die ich mit Daten aus einer XML-Ressource gefüllt
Zum Beispiel habe ich 15 Elemente in der GridView, die in der Reihenfolge angeordnet sind. Die Gesamthöhe übersteigt die Bildschirmhöhe, also muss ich scrollen, um den Rest der Elemente zu sehen.
Das Problem ist, wenn ich zurück blättern, hat sich die Reihenfolge der unsichtbaren Zeilen geändert. Es ist ein mysteriöses Verhalten, da Gegenstände manchmal miteinander vertauscht werden.
Hier ist meine getView
-Methode:
Update: Nun, es ist ziemlich merkwürdig. Nach etwas mehr Debugging habe ich festgestellt, dass der Adapter im GridView die 13. Position überspringt, was bedeutet, dass er 1 statt 13 zurückgibt und dann auf 14 weitergeht !!! (Ich denke, die 13 ist Pech!)
Wenn dies der gesamte Code ist, den Sie in der getView
-Methode haben, implementieren Sie ihn nicht richtig:
Ich weiß nicht, ob der obige Code funktioniert, deins ist ein bisschen seltsam. Wie auch immer, ich denke, das Verhalten, das Sie sehen, ist normal, weil alles, was Sie in Ihrem Adapter tun, die ersten sichtbaren Elemente auffüllt und dann der Adapter die exact gleichen Elemente wiederverwenden wird, wenn Sie nach oben und unten scrollen Recycling. In getView
solltest du:
convertView
null
ist:
null
ist, ist es an der Zeit, ein neues View
für dieses GridView
Element aufzublasen. Sie können auch das Halterungsmuster verwenden, um nach dem Composing Views
zu suchen (anstatt jedes Mal mit findViewById
zu suchen) (Sie verwenden das setTag
-Element für die überhöhte Ansicht, aber es ist ein Stück Daten aus den Node
-Daten Element?!? Was hast du damit vor???) null
ist, werden Sie nichts tun (oder wenn Sie das Halterungsmuster implementieren, würden Sie das Tag mit dem bereits gesuchten Views
erhalten) Und das sollten Sie in dieser if / else-Anweisung tun
Views
mit Daten füllen (so dass sie die entsprechenden Daten für diese Position enthalten). Ihre Adapterimplementierung ist fatal fehlerhaft.
In getView()
, wenn convertView
ist null
, blähen Sie ein Layout auf und füllen Sie seine Widgets. Das ist in Ordnung.
In getView()
, wenn convertView
nicht null
ist, machen Sie absolut nichts. Das ist äußerst falsch.
Was Sie tun sollten in getView()
, wenn convertView
nicht null
ist, füllt immer noch die Widgets der Zelle . convertView
stellt eine Zelle dar, die wiederverwendet werden soll. Sie können also die Inflation überspringen und CPU-Zeit sparen. Sie müssen jedoch die Widgets dieser Zelle aktualisieren, um die Position wiederzugeben, die Sie in diesem spezifischen getView()
-Aufruf einrichten sollen / p>
Tags und Links android android-gridview