2012-09-11 7 views
13

パフォーマンスは、ViewHolder patternのViewHolderを静的にすることが重要ですか?ViewHolderパターンでは、パフォーマンスがViewHolderを静的にすることが重要ですか?

A ViewHolderのオブジェクトストアレイアウトのタグ フィールド内のコンポーネントの各ビュー、あなたはすぐに繰り返し、それらを検索する 必要なく、それらにアクセスできるようにします。まず、正確なビューセットを保持するクラスを に作成する必要があります。

static class ViewHolder { 
    TextView text; 
    TextView timestamp; 
    ImageView icon; 
    ProgressBar progress; 
    int position; 
} 

答えて

8

それが使用してについてです、パフォーマンスのために重要ではありません。

No enclosing instance of type Type is accessible. 
Must qualify the allocation with an enclosing instance of type Type 
(e.g. x.new A() where x is an instance of Type). 
+10

ViewHolderクラスをアダプタクラス自体の内部で使用するとどうなりますか?次に、親クラスのインスタンスを提供する必要はありません。 –

+4

うん、あなたはしません。 – Jin35

+0

しかし、それはhttp://stackoverflow.com/questions/10864853/when-exactly-is-it-leak-safe-to-use-anonymous-inner-classesで指摘されているようにアダプタをリークする可能性があります – divyenduz

1

編集:たとえば質問を誤解 - あなたがそれstaticすることについて、具体的求めているようです。それはパフォーマンスにとって重要ではありませんが、そのアイデアはすべての助けになります。ここ

最終編集:Static nested class in Java, why?

====

以下

ORIGの答え:

それは重いリストビューのうち、性能(または AdapterViewをリサイクルの他のいくつかの種類を絞ることは非常にうれしいです)。しかし、何らかの形でパフォーマンスをプロファイリングするのが最善の方法です。

またGoogle IO 2010で、彼らはこの方法をお勧めします。

http://www.youtube.com/watch?v=wDBM6wVEO70

編集:私はわからないどれだけそれだのに

はまた、ここで、パフォーマンスをプロファイリングするtraceviewへのリンクです働く

http://developer.android.com/tools/debugging/debugging-tracing.html

-2

それはそれを行うことは必須ではありません: - ViewHolderクラスは静的ではありません場合は、親クラスのインスタンスを提供する必要があります。しかし、このようにすると、アダプタビューがnullのときにビューが再び使用されます。ビューを作成してビュー部分に値を割り当て、静的クラスViewHolderを使用してビュー全体にタグを付けます。だからあなたが戻ってきて、viewがnullでないときは、可視部分がタグを取得するようになるでしょう。これは、アダプターの作業負荷を軽減し、作業負荷を軽減する方法です。

関連する問題