안드로이드 개발 질문/답변
(글 수 45,052)
class ImageCursorAdapter extends CursorAdapter {
int idx = 0; public ImageCursorAdapter(Context context, Cursor c) { super(context, c); }
@Override public void bindView(View view, Context context, Cursor cursor) { ImageLoader imageLoader = new ImageLoader(view); imageLoader.setPosition(cursor.getPosition()); imageLoader.execute(cursor); }
@Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ImageView v = new ImageView(context); v.setLayoutParams(new GridView.LayoutParams(200, 200)); v.setScaleType(ImageView.ScaleType.FIT_CENTER); v.setId(cursor.getPosition()); return v;
} class ImageLoader extends AsyncTask<Cursor, Void, Bitmap> { private WeakReference<ImageView> mImageView; private int mPosition; public ImageLoader(View view) { mImageView = new WeakReference<ImageView>((ImageView)view); }
@Override protected Bitmap doInBackground(Cursor... cursor) { long id = cursor[0].getLong(mCursor.getColumnIndexOrThrow(Images.Media._ID)); Bitmap bitmap = Images.Thumbnails.getThumbnail(getContentResolver(), id, Images.Thumbnails.MICRO_KIND, null); return bitmap; } @Override protected void onPostExecute(Bitmap result) { if(mImageView.get().getId() == mPosition){ try { mImageView.get().setImageBitmap(result); } catch(Exception e) {} } } public void setPosition(int position) { mPosition = position; } } }
그리드 뷰에 커스텀 CursorAdapter를 사용해서 기본 갤러리에 있는 이미지를 가져와야하는데. 그냥 쓰면 스크롤이 너무 느려서
AsyncTask를 사용했습니다. (소스 참고부탁드립니다.)
그런데 위와 같이 작성 할 시 같은이미지가 중복되서 보여지는 문제가 발생합니다.
그래서 AsyncTask를 사용하지 않고 바로 bindview에 이미지를 가져오고 셋팅하는 코드를 넣었더니 제대로 이미지가 나옵니다.;;
어느부분이 문제가 되서 저렇게 될까요..?