2013-06-28 2 views
0

Я начал использовать Universal Image Loader, но я каким-то образом ошибся. У меня есть listView с изображениями большого пальца, и когда я прокручиваю вниз и все изображения смешиваются, верхнее изображение будет другим, если я прокручу его назад и т. Д.UniversalImageLoader mix up thumb images

Пожалуйста, помогите, я использую viewHolder, я буду решать эту проблему, но нет.

Вот мой адаптер:

public class CouponAdapter extends BaseAdapter { 

public List<HashMap<String, String>> adapterData = new ArrayList<HashMap<String, String>>(); 

Context context; 
LayoutInflater inflater; 
ImageLoader imageLoader; 

public CouponAdapter(Context context, List<HashMap<String, String>> data, int resource) { 

    imageLoader = ImageLoader.getInstance(); 
    inflater = LayoutInflater.from(context); 
    setAdapterData(data); 
    this.context = context; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 

    if (convertView == null) { 

     convertView = inflater.inflate(R.layout.kupon_list_item, null); 

     viewHolder = new ViewHolder(); 
     viewHolder.titleTv = (TextView) convertView.findViewById(R.id.cpTitle); 
     viewHolder.imgView = (ImageView) convertView.findViewById(R.id.kuponImageView); 

     convertView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    HashMap<String, String> map = adapterData.get(position); 
    viewHolder.titleTv.setText(map.get("coupon_title")); 

    String imgUrl = Variables.baseURL + Variables.kuponAlapKepUrl + map.get("img"); 
    imageLoader.displayImage(imgUrl, viewHolder.imgView); 

    return convertView; 
} 

static class ViewHolder { 

    public TextView titleTv; 
    public ImageView imgView; 
    public String imgUrl; 

} 

@Override 
public int getCount() { 

    if (adapterData != null) { 
     return adapterData.size(); 
    } else { 
     return 0; 
    } 

} 

@Override 
public Object getItem(int position) { 
    return adapterData.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public void setAdapterData(List<HashMap<String, String>> data) { 

    for (int i = 0; i < data.size(); i++) { 
     HashMap<String, String> map = data.get(i); 
     this.adapterData.add(map); 
    } 
} 

} 

А вот мой ImageLoader инициализационные в моем MainActivity, который работает до запуска адаптера.

public class MainActivity extends AlapSlidingActivity{ 



public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 



    DisplayImageOptions displayimageOptions = new DisplayImageOptions.Builder() 
      .cacheInMemory().cacheOnDisc().build(); 


    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      getApplicationContext()).defaultDisplayImageOptions(
      displayimageOptions).build(); 
    ImageLoader.getInstance().init(config); 


//............................... more code here.. 
+0

Я заметил, что в 'setAdapterData' вы не очищаете' adapterData' перед добавлением к нему, и это общедоступный метод. Вы не можете назвать это где-нибудь, кроме конструктора? Это заполнило бы ваш список дважды. Я не думаю, что это проблема. Просто все, что я вижу прямо сейчас :) –

+0

Я использую его один раз в конструкторе, это проблема tho? –

+0

Нет, должно быть хорошо. Являются ли 'imgUrl' правильными и уникальными? Вот как загрузчик знает, что загрузить. Только что-то, о чем я могу думать, что-то неправильно происходит с популяцией ваших карт. –

ответ

0

Вы должны кэшировать изображения, загруженные в вашем хранилище SD карту, а затем привязать его к ListView изображения или GridView.