2013-09-19 2 views
1

Я хочу правильно установить образ в ImageView внутри ListView. Я использую SimpleCursorAdapter для отображения всех полей и с помощью ViewBinder для установки растрового изображения изображения в ImageView. Изображение загружается с использованием AsyncTask. Но изображение не на правильной строке.Показать изображение из базы данных в ListView (с помощью 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; 
       } 
     } 

ответ

0

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

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, что очень эффективно.

+0

Это не работает, изображение меняется, когда я перемещаюсь в спискеView. Но когда я не использую Asynctask, он работает –

+0

Вы столкнулись с проблемой утилизации, попробуйте lazylist https://github.com/thest1/LazyList –

+0

LazyList использует URL и BaseAdapter, но меня, я использую drawable и SimpleCursorAdapter, поэтому я не могу use LazyList –

Смежные вопросы