私は非常に苛立たしい問題を抱えており、何が悪いのかわかりません。GridView のみを含む単純な XML を作成します。このグリッドビューには、コードで取得した特定の URL からダウンロードした画像 (ImageView) が表示されます。
したがって、このアプリのアイデアは、URL から画像をダウンロードし、それらの画像を GridView に表示することだけです。まず、Universal Image Loader ライブラリを使用していると言わなければなりません。まず、私の getView コードを見てください:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv;
if(convertView == null) {
iv = new ImageView(MyActivity.this);
iv.setLayoutParams(new GridView.LayoutParams(size,size));
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
Log.d("APP", "convertView is NULL");
}
else {
iv = (ImageView) convertView;
Log.d("APP", "convertView is NOT null");
}
loader.displayImage(URLS.get(position), iv);
return iv;
}
問題:
上記のコードは機能し、GridView に画像を表示します。しかし、下にスクロールすると、次のように表示されます。
- すべての画像がダウンロードされました (表示されていない画像も含む)
- 上にスクロールすると、場所0にあった画像が場所1にあり、再度ダウンロードされていることがわかります。下にスクロールすると、画像の位置が再び変わりました。上にスクロールすると、画像が再び場所を切り替えていることがわかります(そして再びダウンロードしています)。これは無限に進みます。
この問題の解決方法:
convertView 変数が null かどうかをチェックしないことで、この問題を解決しました。実はif/else節を省略しています。
私はメモリ内のキャッシュを使用しました= true。そのため、ダウンロードが停止し、画像が永久に残ります。
では、なぜ私は助けを求めているのですか?主な理由は、パフォーマンス上の理由から if/else 句を省略してはならないことを知っているからです。ユーザーのメモリを台無しにしたくないので、高速で信頼性の高いユーザー エクスペリエンスを提供したいと考えています。また、何が間違っているのか知りたいです。
ご協力ありがとう御座います。とても感謝しています。