2011-10-28 25 views
10

私はアクティビティでListViewを持っており、私はListViewにカスタムアダプターを設定しています。Androidのアダプターは、静的内部クラスまたは非静的内部クラスである必要があります

私のアダプタクラスは次のようになります。

private static class MyAdapter extends ArrayAdapter 

または

private class MyAdapter extends ArrayAdapter 

私はそれがある限り、アダプタがアクティビティの参照内に封入されたが、それを確認するために望まれるように違いを作るべきではないと思います。

+0

(今後の読者向け)最後の質問は後ろ向きです。静的な内部クラスを持ち、アクティビティ/コンテキストへのアクセスが必要な場合は、WeakReferenceを使用する必要があります(アクティビティよりも長生きするものがあれば)。クラスが静的で内部的でない場合、外部クラスへの暗黙の強い参照があります。その場合でも、アダプタの使用方法に注意する必要があります。静的を使用すると、暗黙のリークを見つけるのに役立ちますが、コンテキスト/弱参照を渡す際にオーバーヘッドが加わります。 – lilbyrdie

+0

また、Viewオブジェクトを取得するアダプタへの呼び出しでは、コンテキストを使用できます(View.getContext())。 instanceofを使用して、それがあなたの活動であることを確認することができます。 – lilbyrdie

答えて

15

アダプターの使用方法に注意が必要な場合は、アダプター内からコンテクストを保持することは問題ありません。アダプターは、通常、コンテクスト(アクティビティー)のライフサイクルに縛られているので、問題ありません。 WeakReferenceを意味がある場合にのみ使用してください。

+0

「アダプターの使い方を覚えている」ということについてもっと詳しく説明できますか?したがって、アダプターはアクティビティー・ライフ・サイクルに結びついているので、2つのうちどちらが重要ではないようです。 – dnkoutso

+1

例えば、あなたのアクティビティよりも長く存続する静的なフィールドにアダプタを保持しないでください。 –

+0

@RomainGuy 'onDestroy()'で静的なアダプタオブジェクトを明示的に 'null'にするとどうでしょうか?それは良いアプローチですか? –

関連する問題