0

ListView曲に関する情報を保持するがあります。追加カバー画像をに追加したいListView

そのため、アダプターを作成しました。このアダプタの主なものは、次のgetView()方法です。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final Map dataSet = mData.get(position);
    View v = convertView;
    ViewHolder holder;
    if (convertView == null) {
        v = mInflater.inflate(mResource, parent, false);
        holder = new ViewHolder();
        holder.artist = (TextView) v.findViewById(R.id.artist);
        holder.imageView = (ImageView) v.findViewById(R.id.imageListView);
        holder.title = (ScrollingTextView) v.findViewById(R.id.title);
        holder.time = (TextView) v.findViewById(R.id.time);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }
    holder.artist.setText((CharSequence) dataSet.get("artist"));
    holder.title.setText((CharSequence) dataSet.get("title"));
    holder.time.setText((CharSequence) dataSet.get("time"));

    GetImg gi = new GetImg(v, mContext);
    gi.start();

    return v;
}

ViewHolderパフォーマンスを向上させるためにを使用していることがわかります。を拡張するGetImgクラスではThread、画像をダウンロードして、に設定しBitmapていImageViewます。

現在、次の問題が発生しています。場合によっては、の複数の子ビューがListView同じ画像を取得します。なんで?

を使用しない場合convertView、すべてが正常に機能しますが、。の場合ほど高速ではありませんconvertView

4

2 に答える 2

0

dataSetからアーティスト、タイトル、時間に個別の値を設定するだけです。画像ビューでは、ホルダーと同じことをする必要があります。ListViewのビューごとに一意の画像を含むdataSetがあるとすると、ImageViewにもsetImageDrawableメソッドを追加する必要があります。何かのようなもの :

holder.imageView.setImageDrawable(//access your dataSet for images from here //);
于 2013-03-04T23:44:39.460 に答える
0

内の画像をダウンロードするために新しいスレッドを作成するべきではないと思いますgetView()。そのようにスレッドを管理することは非常に困難です。代わりに、これらを試すことができます:

たとえば、ユーザーが新しいアイテムにスクロールすると、画像をクエリします。コンテンツプロバイダーで、画像が新しい場合は、新しいスレッドを作成して画像をダウンロードします。完了したら、「偽の」挿入を行って、ローダーにデータをリロードさせ、画像をビューに割り当てます。

ノート:

  • スレッドを適切に管理してください。何百ものアイテムがあり、ユーザーがリストをスクロールしているときに作成するスレッドが多すぎる可能性があります。
  • に「低速アダプタ」を使用することを検討してくださいListView。この例は、[Android-SDK]/samples/android-xxx/ApiDemos/src/com/example/android/apis/view/List13.javaで表示できます(またはエミュレーターでは、アプリAPIデモ>ビュー>リスト>を開きます。 13.低速アダプター)。

完全な例(ソースコードのないアプリのみ)を表示するには、これを試してください。私は上記のテクニックと「スローアダプター」を使用して、画像やビデオのサムネイルを表示しています。

于 2013-03-05T00:46:40.680 に答える