0

このチュートリアルに基づいてギャラリー ビューアーを作成しましたが、サムネイルをクリックすると問題が発生します。たとえば、2 番目のサムネイルをクリックすると 3 番目に移動し、4 番目をクリックすると 5 番目に移動します。しかし、6 番目をクリックすると実際には 6 番目に移動します。サムネイルの位置とアダプターのリサイクルに関係があるに違いないと思いますが、解決策に出くわすことはできません。

これは私のアダプターです:

public class ImageAdapter extends BaseAdapter {

        private Context ctx;
        int imageBackground;

        public ImageAdapter(Context c) {
            ctx = c;
            TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
            imageBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1);
            ta.recycle();
        }

        public int getCount() {
            return mImagesUrls.size();
        }

        public Object getItem(int arg0) {
            return arg0;
        }

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

        // Thumbnails gallery

        public View getView(int arg0, View arg1, ViewGroup arg2) {
            ImageView iv;
            if (arg1 == null) {
                iv = new ImageView(ctx);
            } else {
                iv = (ImageView) arg1;
            }

            // iv.setImageResource(mImagesUrls.get(arg0));
            mCache.loadBitmap(mImagesUrls.get(arg0), iv);
            iv.setScaleType(ImageView.ScaleType.FIT_XY);

            // Image size of the thumbnails
            iv.setLayoutParams(new Gallery.LayoutParams(200, 120));
            iv.setBackgroundResource(imageBackground);
            GalleryTitleTv.setText((arg0 + 1) + " van " + mImagesUrls.size());
            return iv;
        }
    }

よろしくお願いします!

編集:これは、サムネイル用の画像のキャッシングです:

public void loadBitmap(String url, ImageView imageView) {
        Bitmap mImageHolder = BitmapFactory.decodeResource(context.getResources(), R.drawable.pic_2);
        final String imageKey = url;
        final Bitmap bitmap = get(imageKey);
        if (bitmap != null) {
            imageView.setImageBitmap(bitmap);
        } else {
            imageView.setImageBitmap(mImageHolder);
            BitmapWorkerTask task = new BitmapWorkerTask(imageView);
            task.execute(url);
        }
    }
4

1 に答える 1

0

サムネイルの位置とアダプターのリサイクルに関係があるに違いないと思いますが、解決策に出くわすことはできません。

ギャラリーはビューをリサイクルしないので、そうではないと思います。

            ImageView iv;
            if (arg1 == null) {
                iv = new ImageView(ctx);
            } else {
                iv = (ImageView) arg1;
            }

同じ理由で、このスニペットは役に立ちません。ImageViewarg1 は常に null になるため、コントロールを回避して毎回割り当てることができます。ビットマップをキャッシュするかどうかについて、より多くの情報を提供する必要があります。IMHO 問題はキャッシュまたは mImagesUrls 関連です。

于 2012-07-04T13:18:31.673 に答える