2012-11-26 9 views
14

Ich habe eine benutzerdefinierte Liste und es dauert einige Minuten, um zu zeigen. Als ich versuchte zu überprüfen, wo das Problem liegt, habe ich gesehen, dass selbst wenn ich nur 1 Element in der Liste habe, die Methode getCount() 5 Mal aufgerufen wird, getVIEW() einmal aufgerufen wird, dann getCount() zu mehr Zeit gerufen werden. Insgesamt wird getCount() 7 Mal aufgerufen. Macht das Sinn?Warum wird getCount im Adapter so oft aufgerufen?

Vielen Dank!

+0

PLease bietet Codebeispiel! –

+0

Zeigen Sie den Code. Und ich bezweifle eher, dass getCount() Ihre Liste Crawl –

+0

Scrollen machen? bieten mehr Daten – GamDroid

Antwort

9

Sie können here die verschiedenen internen Aufrufe der Adapter.getCount() Methode sehen.

Aber Sie müssen bedenken, dass Sie keine Kontrolle darüber haben, wie diese Methode aufgerufen wird.

Es kann mehrere Male aufgerufen werden und deshalb müssen Sie es so schnell wie möglich halten.

+0

Sorry, aber ich habe den "behalte es so schnell wie möglich" -Teil nicht verstanden - diese Methode gibt nur die Array-Größe richtig zurück? – user1787773

+1

Sicher. Aber Sie können es überschreiben, wie Sie möchten. Die Idee besteht darin, dafür zu sorgen, dass Sie keine kostspielige Berechnung durchführen, da sie wahrscheinlich mehrmals im UI-Thread aufgerufen wird. – fiddler

+0

Ich habe es nicht überschrieben. Ich gebe nur die Array-Größe zurück. Also ich denke, das bedeutet, dass die Zeit, die die ListView zum Erscheinen braucht, nichts mit getCount() zu tun hat, die oft aufgerufen wird? – user1787773

2

getCount() wird zu oft genannt, weil App-USER kann update its list zu jeder Zeit und das ist (kann Daten in seiner Speicher hinzufügen), warum wir (storage).size() (Gesamtzahl der Elemente) zurückzukehren.

1

Adapter getCount() Methode wird in folgenden Fällen aufgerufen.

1) wenn der Adapter auf Listenansicht/Rasteransicht eingestellt wird.

2) wenn wir notifyDataSetChanged auf Adapter anrufen.

So überprüfen Sie in Ihrem Code, könnte man den oben genannten Fällen mehr Zeit oder rekursiv ..

0

Sie sollten eine Suchtaste haben tun, die den Adapter aktualisiert Suche verwenden. Diese Methode wird als mehrfaches Zeichnen der Ansicht bezeichnet, wenn Sie innerhalb dieser Methode eine setAdapter haben, dann wird getCount oft aufgerufen, und am Ende wird 0 zurückgegeben und Ihre Ansicht wird nicht gefüllt.

Verwandte Themen