0

リモートサーバーから多くの画像をロードするAndroidプロジェクトに取り組んでいます。

画像をダウンロードするためにこのユーティリティを使用しています:

http://code.google.com/p/android-imagedownloader/

主な問題は、画像のダウンロードが完了すると、画面全体がリセットされたように見えることです。

ビューのリセットとともに、アニメーション化された UI コントロールの位置もリセットされます。

4

1 に答える 1

0

このコードは 2 年前の記事に基づいており、Android 開発者はそれ以来、ListView Adaptewr 内で ASync 画像を処理するためのより優れた情報とメソッドを提供しています。

理想的には、ImageDownload クラスまたは何らかの種類を実装し、ビューを正しく更新notifyDataSetChanged();するために呼び出しを使用する必要があります。ListViewAdpater

ImageLoadedCallback を作成します。

// Interfaces
public interface ImageLoadedCallback {
  public void imageLoaded(Drawable imageDrawable, String imageUrl);
}

ListAdapter に実装します。

このコードが行っているのは、リストに表示する次のアイテムを取得し、画像が利用可能かどうかを確認することです。利用可能な場合は設定します。そうでない場合は、ASync リクエストを送信してロードし、準備ができていることをアダプタに知らせます。

public class ArticleAdapter extends SimpleCursorAdapter implements ImageLoadedCallback {
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    if(getCursor().moveToPosition(position)) {
      ViewHolder viewHolder;

      if(convertView == null) {
        convertView = inflater.inflate(R.layout.article_list_item, null);
        viewHolder = new ViewHolder();
        viewHolder.image = (ImageView) convertView.findViewById(R.id.imgArticleImage);
        convertView.setTag(viewHolder);
      } else {
        viewHolder = (ViewHolder) convertView.getTag();
      }
      String image = getCursor().getString(getCursor().getColumnIndex("thumbURL"));
      if(imgCache.hasImage(image)) {
        viewHolder.image.setImageDrawable(imgCache.loadDrawable(image, this));
      } else {
       imgCache.loadDrawable(image, this);
      }
    }
    return convertView;
  }

  public void imageLoaded(Drawable imageDrawable, String imageUrl) {
    this.notifyDataSetChanged();
  }
}
于 2012-07-05T15:58:34.183 に答える