Ist es besser, mehrere SpanObjects oder mehrere TextViews in Android zu verwenden?

9

Ich habe ein ListView mit einem TextView und in jedem TextView mehrere Elemente mit jeweils einer kurzen Beschreibung. Um verschiedene Stile für die Items und die Beschreibung zu verwenden, verwende ich mehrere Span-Objekte: ClickableSpan , ForegroundColorSpan , BackgroundColorSpan , AbsoluteSizeSpan und StyleSpan .

Im Durchschnitt hat die ListView 10 TextView s, und jede TextView hat 10 Paare von Item / Beschreibung und jedes Paar verwendet etwa 6 SpanObject s, also insgesamt ~ 600 SpanObject s pro% Code%. Und wenn der Benutzer auf eines der Elemente klickt, wird ListView gelöscht und erneut gezeichnet, wodurch ein weiterer Satz von 600 ListView s generiert wird.

Ich frage mich also, ob es eine bessere Idee wäre, für jedes Element und jede Beschreibung ein SpanObject zu erstellen und es über XML zu formatieren, anstatt die TextView s mit span zu gestalten, so würde es etwa 200% geben. co_de% s und keine TextView s.

Als Anmerkung habe ich nicht mit diesem Ansatz begonnen, weil die Hierarchiebaumstruktur von Sichten komplexer sein würde und TextView s teurer wäre, um die SpanObject s zu erstellen, aber jetzt sehe ich die Anzahl von TextView s Ich erstelle ich bin mir nicht sicher, was besser ist. Ich denke auch darüber nach, einen Recycling-Mechanismus zu schreiben, aber ich bin mir nicht sicher, ob es das wert ist oder das sollte kein Problem für Android GC sein.

    
garibay 11.04.2012, 16:04
quelle

1 Antwort

1
Ich weiß, es ist ein paar Jahre her, seit du diese Frage gestellt hast, und ich hoffe, du hast jetzt eine Antwort gefunden, aber ich dachte, ich würde deine Frage trotzdem beantworten.

Die Menge an TextViews und SpanObjects, die Sie haben, ist unglaublich teuer für jedes Android-Gerät, und das Laden jedes Mal kann nicht nur Verzögerung verursachen, sondern möglicherweise auch einen OOM-bezogenen Crash (nicht genügend Arbeitsspeicher).

Die Lösung hierfür besteht in der Verwendung von RecyclerView und CardView. Schreiben Sie zuerst Ihren RecyclerView-Adapter. Schreiben Sie innerhalb dieser Klasse eine statische Klasse, die alle TextViews und andere Elemente innerhalb jeder Karte lädt (eine Karte ist im Wesentlichen ein Listenelement). Auf diese Weise werden alle Ihre Artikel in OnCreate geladen und nicht kontinuierlich generiert. Dies ist besonders hilfreich, wenn Sie Fragmente verwenden. Dieser Link kann für Sie von Nutzen sein: Ссылка

Hier ist ein Beispiel für eine RecyclerView-Adapterklasse mit der statischen Klasse:

%Vor%     
Jason Cromer 11.08.2015 01:48
quelle