2012-07-04 6 views
0

this 자습서를 기반으로 갤러리 뷰어를 만들었으며 미리보기 이미지를 클릭 할 때 문제가 있습니다. 예를 들어 두 번째 축소판 그림을 클릭하면 세 번째로 이동합니다. 네 번째를 클릭하면 다섯 번째로 이동합니다. 그러나 여섯 번째를 클릭하면 실제로 여섯 번째로 이동합니다. 축소판의 위치 및 어댑터 재활용과 관련이 있다고 생각하지만 솔루션으로 넘어지지 않습니다.안드로이드 갤러리 뷰어 재활용

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); 
     } 
    } 

답변

0

: 이것은 내가 축소판 이미지로하고있어 캐싱입니다 어댑터,하지만 나는 비틀 거리는 수 없습니다 솔루션.

갤러리는보기를 재활용하지 않기 때문에 생각하지 않습니다.

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

이 스 니펫은 유용하지 않습니다. arg1은 항상 null이므로 제어를 피하고 매번 ImageView을 할당 할 수 있습니다. 비트 맵을 캐시하는 방법에 대한 자세한 정보를 제공해야합니다. 이 문제는 캐시 또는 mImagesUrl 관련 문제입니다.

+0

네, 맞습니다 :'View' 매개 변수를 항상'null'로 만드는 버그가 있습니다. – noloman

+0

HashMap을 사용하여 위치를 키로 사용하여 URL을 검색하고 HashMap을 사용하여 URL이 지정된 비트 맵을 검색합니까? – Blackbelt

+0

나는이 접근법에 나쁜 점이 있다고 생각한다. – noloman

관련 문제