0

この動作について少し説明したいと思います:

リストビューを作成しました。リストビューの各項目には、URL からの画像で埋められる画像ビューがあります。

リストまで下にスクロールすると、アイテムが表示されたときに各画像が読み込まれます => OK

しかし、上にスクロールすると、以前にロードされた画像が再度ダウンロードされます。

この動作を停止するにはどうすればよいですか?

これが私のダウンローダーのコードです:

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon11;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }

そして、ここに私のアダプターのコードがあります:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Activity activity = (Activity) getContext();

        LayoutInflater inflater = activity.getLayoutInflater();

        View rowView;
        ArticleHome article = getItem(position);


        if (position == 0) {
            rowView = inflater.inflate(R.layout.item_ligne_home_premier, null);
            new DownloadImageTask((ImageView) rowView.findViewById(R.id.imgimg)).execute(article.getImage());
            TextView textView = (TextView) rowView.findViewById(R.id.titlenew);
            textView.setText(article.getTitle());
            textView.setTypeface(faceLight);
        }
        else {
            rowView = inflater.inflate(R.layout.item_ligne_home, null);
            new DownloadImageTask((ImageView) rowView.findViewById(R.id.imgimg)).execute(article.getImage());
            TextView title = (TextView) rowView.findViewById(R.id.titlearticleothers);
            title.setText(article.getTitle());
            title.setTypeface(faceBold);
            TextView desc = (TextView) rowView.findViewById(R.id.descriptionarticleothers);
            // Add test si < a une certaine longeuryr
            desc.setText(article.getDescription().substring(0, 100));
            desc.setTypeface(faceLight);
        }


//      img.setImageAlpha(1680);
//      img.setImageAlpha(1880); // Pasmal plus haut plus foncé


        return rowView;

    } 
4

1 に答える 1

0

実際にそれを行う方法は、ダウンロードした各画像をキャッシュし、 ListView アイテムを Cache からの画像で更新し、画像がキャッシュに存在しない場合にのみダウンロードすることです。

これにより、ダウンロードが回避されます。

Pramod J Georgeによるこの回答、特に ImageLoader クラスを確認してください。

于 2013-08-20T15:12:38.120 に答える