メモリ不足エラーが発生します。DDMS を確認したところ、より多くのメモリを割り当てる場所がアダプターの getView() メソッドにあることがわかりました。この方法よりもオブジェクトを作成する方が良い方法ですか:
view=new ImageView(myContext);
これは私の getView() メソッドの一例です:
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView==null){
view=new ImageView(myContext);
view.setLayoutParams( new AbsListView.LayoutParams(columnWidth,columnWidth));
view.setBackgroundColor(Color.GRAY);
}else{
view=convertView;
convertView.setBackgroundColor(Color.GRAY);
}
return view;
}
c'tor でコンテキストを取得します。
public emptySquaresAdapter( Context myContext,) {
super();
this.myContext=myContext;
}
コンテキストリークについて読みましたが、そうですか?
編集:
この場合、画面内のすべてのビューを一度に表示するので、変換されたビューは使用されません (さらにビューを表示するためにスクロールする必要はありません)。
このアダプターは、画面に 12 個の正方形を表示します。メソッド getView は、位置 0 で 12 回呼び出され (すべての子 Vie を測定すると思います)、1,2,3 の位置に移動し続けます...なぜそれが起こるのですか? これで OOM の問題が発生する可能性はありますか? このアダプターを別のアダプターから呼び出しますが、それがすべてを複雑にしていると思います。
また、onDestroy ですべてのドローアブルのバインドを解除し、imageView.getDrawable().setCallback(null) をすべての imageViewsIt に設定します。