Androidのアダプタは、静的内部クラスまたは非静的内部クラスである必要があります

私はアクティビティでListViewを持っており、カスタムアダプタをListViewに設定しています。

私のアダプタークラスは:

private static class MyAdapter extends ArrayAdapter 

または

private class MyAdapter extends ArrayAdapter

アダプターがアクティビティー参照内に囲まれていても、それを確認したい限り、違いはありません。

11
(将来の読者のために)最後の質問は後ろ向きです。静的な内部クラスを持ち、アクティビティ/コンテキストへのアクセスが必要な場合は、WeakReferenceを使用する必要があります(アクティビティよりも長生きするものがあれば)。クラスが静的で内部的でない場合、外部クラスへの暗黙の強い参照があります。その場合でも、アダプタの使用方法に注意する必要があります。静的を使用すると、暗黙のリークを見つけるのに役立ちますが、コンテキスト/弱参照を渡す際にオーバーヘッドが加わります。
追加された 著者 lilbyrdie,
また、Viewオブジェクトを受け取るアダプタへの呼び出しでは、コンテキストを使用できます(View.getContext())。 instanceofを使用して、それがあなたの活動であることを確認することができます。
追加された 著者 lilbyrdie,

1 答え

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

17
追加された
たとえば、あなたのアクティビティよりも長く存続する静的なフィールドにアダプタを保管しないでください。
追加された 著者 Romain Guy,
「アダプタの使い方を覚えている」ということについてもっと詳しく説明できますか?したがって、アダプターはアクティビティー・ライフ・サイクルに結びついているので、2つのうちどちらが重要ではないようです。
追加された 著者 dnkoutso,
@RomainGuy onDestroy()で静的なアダプタオブジェクトを明示的に null した場合はどうなりますか?それは良いアプローチですか?
追加された 著者 Muhammad Babar,
いいえ、onDestroy()は私が理解しているものから保証された呼び出しではないためです。
追加された 著者 lilbyrdie,