Welcher Unterschied zwischen statischem und nicht statischem Viewholder im RecyclerView Adapter?

Lesezeit: 2 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
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

Benutzer-Avatar
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

1283060cookie-checkWelcher Unterschied zwischen statischem und nicht statischem Viewholder im RecyclerView Adapter?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy