Отображать изображение из базы данных в ListView (с помощью AsyncTask)

Я хочу правильно установить образ в ImageView внутри ListView. Я использую SimpleCursorAdapter для отображения всех полей и с помощью ViewBinder для установки растрового изображения изображения в ImageView. Изображение загружается с использованием AsyncTask. Но изображение не на правильной строке.

mCurAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {


 @Override
 public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
 // TODO Auto-generated method stub
 if (view.getId()==R.id.iconPosition) {
 Log.d("COLONNE INDEX",""+columnIndex);

 ImageView image = (ImageView) view;



 new DownloadImage(image).execute(cursor.getInt(columnIndex));

 }
 return true;
 }
 return false;
 }
 });
 this.setListAdapter(mCurAdapter);

 return view;
 }

DownloadImage AsyncTask

public class DownloadImage extends AsyncTask<integer, integer,="" bitmap="">{

 private ImageView imv;

 public DownloadImage(ImageView image){
 imv=image;
 }
 @Override
 protected Bitmap doInBackground(Integer... arg0) {
 // TODO Auto-generated method stub
 return downloadImage(arg0[0]);
 }


 protected void onPostExecute (Bitmap image) {

 if(image != null && imv != null){

 imv.setImageBitmap(image);}

 }

 private Bitmap downloadImage(Integer res) {

 BitmapFactory.Options options = new BitmapFactory.Options();
 options.inSampleSize=8;
 Bitmap bitmap=BitmapFactory.decodeResource(getResources(),res,options);

 return bitmap;
 }
 }
</integer,>
1 ответ

Может быть, переработка испортится с вашими взглядами. Я просто догадываюсь здесь. Попытайтесь пометить свое мнение.

ImageView image = (ImageView) view;
image.setTag("row2");

И используйте getTag(), чтобы идентифицировать ваше изображение.

protected void onPostExecute (Bitmap image) {

 if(image != null && imv != null && imv.gettag().equals("row2")){

 imv.setImageBitmap(image);}

 }

Если выше не пытается LazyList, который очень эффективен.

licensed under cc by-sa 3.0 with attribution.