webentwicklung-frage-antwort-db.com.de

Welcher Unterschied zwischen statischem und nicht statischem Ansichtsinhaber in RecyclerView Adapter?

Was sind die Vorteile dieses Ansatzes (die Verwendung einer statisch verschachtelten Klasse in meiner Klasse MyAdapter erweitert RecyclerView.Adapter):

static class MyVH extends RecyclerView.ViewHolder {...}

Und dieser Ansatz (unter Verwendung der inneren Klasse der Mitglieder):

  class MyVH extends RecyclerView.ViewHolder {...}

Oder hat es keinen Einfluss auf die Leistung und beide Ansätze könnten verwendet werden?

61
Lester

Es ist eher eine Java frage als eine Android frage. Es wird empfohlen, statisch für innere Klassen zu verwenden, um Speicherverluste zu vermeiden, wenn Sie deren Instanzen entfernen möchten Sie können sich this awesome post ansehen, der die Speicherlecks in inneren Klassen erklärt.

Grundsätzlich sagt nyx:

  • Wenn Sie den Viewholder als statisch deklarieren, können Sie ihn in anderen Adaptern wiederverwenden. Wie auch immer, ich rate davon ab, eine neue getrennte Klasse zu erstellen und sie an mehreren Stellen zu verwenden. Das macht mehr Sinn. Eine Klasse für einen Zweck.
  • Im Fall von View-Inhabern werden diese Klassen nur innerhalb des Adapters verwendet. Ihre Instanzen sollten nicht per Definition in das Fragment oder die Aktivität oder an eine andere Stelle verschoben werden. Dies bedeutet, dass es für Ansichtsinhaber gleich ist, dass es statisch oder nicht statisch ist.

Bei der Beantwortung Ihrer Performance-Frage können Sie sich this answer ansehen. Die statische Version benötigt weniger Speicher als die andere, aber wir sprechen auch hier von Recyclern, die die Instanzen recyceln, sodass die Auswirkungen auf den Speicher kein Problem darstellen.

90
droidpl

Wenn Sie static verwenden, können Sie MyVh in anderen Adaptern wiederverwenden. Wenn Sie sicher sind, dass Sie nur MyVh für diesen einen Adapter benötigen, sollten Sie ihn nicht statisch machen.

Wenn Sie es in anderen Adaptern benötigen, ist es möglicherweise sogar besser, es als separate Klasse zu erstellen, anstatt als verschachtelte Klasse.

Es sollte keine Auswirkungen auf die Leistung für statische oder nicht statische Komponenten geben!

16
nyx

Wenn Sie einen Ansichtshalter an mehreren Stellen verwenden möchten, wird empfohlen, separate Klassen zu erstellen. Andernfalls erstellen Sie einen nicht statischen verschachtelten Ansichtshalter, wenn Sie den Ansichtshalter nur an einer Stelle verwenden möchten. Ein statischer Viewholder macht keinen Sinn

In den meisten Fällen verwende ich verschachtelte Viewholder-Klassen

0
Prashant Kumar