Welcher Unterschied zwischen statischem und nicht statischem Viewholder im RecyclerView Adapter?
Lesezeit: 2 Minuten
Lester
Was sind die Vorteile dieses Ansatzes (unter Verwendung einer statischen verschachtelten Klasse in meiner Klasse MyAdapter erweitert RecyclerView.Adapter):
static class MyVH extends RecyclerView.ViewHolder {...}
Und dieser Ansatz (unter Verwendung der inneren Klasse des Mitglieds):
class MyVH extends RecyclerView.ViewHolder {...}
Oder wirkt es sich nicht auf die Leistung aus und beide Ansätze könnten verwendet werden?
Droidpl
Es ist eher eine Java-Frage als eine Android-Frage. Es wird empfohlen, static für innere Klassen zu verwenden, um Speicherlecks zu vermeiden, wenn Sie ihre Instanzen aus der Klasse entfernen. Sie können sich diesen großartigen Beitrag ansehen, der die Speicherlecks in inneren Klassen erklärt.
Grundsätzlich was nyx sagt:
Wenn Sie den Viewholder als statisch deklarieren, können Sie ihn in anderen Adaptern wiederverwenden. Wie auch immer, ich empfehle es nicht, eine neue separate Klasse zu erstellen und sie von mehreren Stellen aus zu verwenden, es macht mehr Sinn. Eine Klasse für einen Zweck.
Im Fall von Ansichtsinhabern werden diese Klassen nur innerhalb des Adapters verwendet, ihre Instanzen sollten per Definition nicht zum Fragment oder zur Aktivität oder anderswo gehen. Das bedeutet, dass es im Fall von Ansichtshaltern gleich ist, ob es statisch oder nicht statisch ist.
Wenn Sie Ihre Leistungsfrage beantworten, können Sie sich diese Antwort ansehen. Der statische benötigt weniger Speicher als der andere, aber wir sprechen hier wieder von Recyclern, die die Instanzen recyceln, sodass die Auswirkungen auf den Speicher kein Problem darstellen.
perfekte Erklärung
– Benutzer2695433
29. Mai 2017 um 10:02 Uhr
Ich weiß nicht, ob Sie dies nach 2 Jahren gelesen haben, aber vielleicht können Sie diese Frage beantworten: Bedeutet Ihre Antwort, dass es tatsächlich in Ordnung ist, einen nicht statischen inneren Klassen-ViewHolder zu verwenden, oder verstehe ich das falsch?
– Florian Walther
18. Dezember 2017 um 22:28 Uhr
Ja, es ist eigentlich in Ordnung, solange Sie es richtig verwenden, ohne die Instanz außerhalb ihres übergeordneten Elements zu bringen
– Droidpl
19. Dezember 2017 um 17:57 Uhr
Durch die Verwendung von Static bedeutet dies nur, dass Sie es wiederverwenden können MyVh bei anderen Adaptern. Wenn Sie sicher wissen, dass Sie nur brauchen MyVh in diesem einen adapter, dann solltest du es nicht statisch machen.
Wenn Sie es in anderen Adaptern benötigen, ist es möglicherweise sogar besser, es nur als separate Klasse zu erstellen, anstatt als verschachtelte Klasse.
Es sollte keine Auswirkungen auf die Leistung für statisch vs. nicht statisch geben!
einfache und effektive Erklärung des am häufigsten benötigten Anwendungsfalls
– Benutzer2695433
29. Mai 2017 um 10:03 Uhr
Dies ist nicht der Hauptgrund. Die Verwendung von static beseitigt Speicherlecks für innere Klassen.
– N Droidev
11. Dezember 2021 um 18:40 Uhr
Prashant Kumar
Wenn Sie einen Viewholder an vielen Stellen verwenden möchten, empfiehlt es sich, separate Klassen zu erstellen. Wenn Sie Viewholder nur an einer Stelle verwenden möchten, erstellen Sie andernfalls einen nicht statischen verschachtelten Viewholder. Ein statischer Viewholder macht keinen Sinn
An den meisten Stellen verwende ich eine verschachtelte Viewholder-Klasse
12830600cookie-checkWelcher Unterschied zwischen statischem und nicht statischem Viewholder im RecyclerView Adapter?yes