web-dev-qa-db-ja.com

RecyclerViewアダプタの静的ビューホルダーと非静的ビューホルダーの違いは何ですか?

このアプローチの利点は何ですか(私のクラスMyAdapterでStatic NESTEDクラスを使用すると、RecyclerView.Adapterが拡張されます)。

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

そして、このアプローチ(メンバー内部クラスを使用):

  class MyVH extends RecyclerView.ViewHolder {...}

または、パフォーマンスに影響せず、両方のアプローチを使用できますか?

61
Lester

Javaの質問よりもAndroidの質問です。インスタンスをクラスから取り出す場合、メモリリークを回避するために、内部クラスにstaticを使用することをお勧めします。内部クラスのメモリリークについて説明している this 素晴らしい投稿をご覧ください。

基本的にnyxの言うこと:

  • ビューホルダーを静的として宣言すると、他のアダプターで再利用できます。とにかく、私はそれを行うことをお勧めしません、新しい分離されたクラスを作成し、複数の場所からそれを使用する、それはより理にかなっています。 1つの目的のための1つのクラス。
  • ビューホルダーの場合、このクラスはアダプター内でのみ使用され、そのインスタンスは、定義によってフラグメントまたはアクティビティまたは他の場所に移動しないでください。これは、ビューホルダーの場合、静的または非静的にすることも同じことを意味します。

パフォーマンスの質問に答えるには、 this answerをご覧ください。静的なメモリは他のメモリよりもメモリを消費しませんが、再び、インスタンスをリサイクルするリサイクラについて話しているため、メモリへの影響は問題になりません。

90
droidpl

Staticを使用することは、他のアダプターでMyVhを再利用できることを意味します。その1つのアダプターでMyVhのみが必要であることが確実にわかっている場合は、非静的にする必要があります。

他のアダプタで必要になる場合は、ネストされたクラスではなく、完全に別個のクラスとして作成することをお勧めします。

静的と非静的のパフォーマンスへの影響はありません!

16
nyx

1つのビューホルダーを多くの場所で使用する場合は、個別のクラスを作成することをお勧めします。それ以外の場合、1つの場所でのみビューホルダーを使用する場合は、非静的なネストされたビューホルダーを作成します。静的なビューホルダーは意味をなさない

ほとんどの場所で、ネストされたビューホルダークラスを使用します

0
Prashant Kumar