3

2列の画像ビューを表示するグリッドビューがあります。これらの画像を非同期タスクで読み込んでいます (この記事を参照してくださいListView での画像の遅延読み込み)

しかし、 gridview をスクロールしているとき、位置の画像が混在しています。たとえば、14 番目の画像は 1 番目の画像を示しています。ビューは、非同期タスクが終了する前に古い画像を表示しようとしていると思います。

私のコード:

    public Content getItem(int position) {
        return contents.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    @Override 
    public boolean hasStableIds() { return true; }

    public View getView(int position, View convertView, ViewGroup parent) {
        Thumbnail contentView;
        Content current = contents.get(position);
        if (convertView == null) {
            contentView = new Thumbnail(mContext);  
        }
        else {
            contentView = (Thumbnail) convertView;
        }

        contentView.title = current.getTitle();
        contentView.image = current.getImage();
        contentView.link = current.getLink();
        contentView.init();

        return contentView;
    }

初期化関数

    TextView titleText = (TextView)super.findViewById(R.id.titleText);
    titleText.setText(title);

    ImageView imageControl = (ImageView)super.findViewById(R.id.thumbImage);
    DrawableManager loadImage = new DrawableManager();              loadImage.fetchDrawableOnThread(imgUrl, imageControl);

あなたの助けを待っています

ありがとう

4

2 に答える 2

0

自分で画像をロードしないでください。Universal Image Loaderを使用します。キャッシュ、画像、およびロードされたビットマップが可能です。あなたの問題を解決します。また、スタブ画像の表示やスクロール時の自動一時停止などもサポートしています。

再利用する場合、imageView の最後のインスタンスの画像のみを読み込むことで、特定の問題を解決します。

imageLoader.displayImage(imageUri, imageView);

画像を非同期的にロードするために必要なのはこれだけです。

于 2013-04-30T12:19:00.957 に答える