ListView, as in a universal image loader image application

I use a universal image downloader to display thumb images in a list. I implemented the basic steps in the adapter, and everything works. The problem is that if I have 10 items in the list and I can see the first 5 as soon as I scroll down the new images, but when I scroll through the backups, the images are replaced again correctly, what I want is the first 5 images that are shown at startup should not be replaced. So when I scroll back up and down, the images are not replaced again and again.

As in the example with the uil ListActivity sample, images loaded after loading are not replaced when scrolling back.

Here is the code

Application class

public class MyApplication extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); // Create default options which will be used for every // displayImage(...) call if no options will be passed to this method DisplayImageOptions displayimageOptions = new DisplayImageOptions.Builder().cacheInMemory().cacheOnDisc().build(); // Create global configuration and initialize ImageLoader with this configuration ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()). defaultDisplayImageOptions(displayimageOptions).build(); ImageLoader.getInstance().init(config); } } 

Adapter

 public class CarListAdapter extends BaseAdapter { private ArrayList<CarDetail> items = new ArrayList<CarDetail>(); private Context context; private ImageLoader imageLoader; private ImageLoadingListener animateFirstDisplayListener; public CarListAdapter(Context context , ArrayList<CarDetail> items , ImageLoadingListener animateFirstDisplayListener) { super(); this.context = context; this.items = items; this.animateFirstDisplayListener = animateFirstDisplayListener; imageLoader = ImageLoader.getInstance(); imageLoader.init(ImageLoaderConfiguration.createDefault(context)); } @Override public int getCount() { // TODO Auto-generated method stub return items.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return items.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Log.d("Inside", "GetView"); LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); ViewHolder holder = null; final CarDetail car = items.get(position); if (convertView == null) { convertView = mInflater.inflate(R.layout.car_list_row, parent , false); holder = new ViewHolder(); holder.tvCarName = (TextView) convertView.findViewById(R.id.tvCarName); holder.tvDailyPriceValue = (TextView) convertView.findViewById(R.id.tvDailyPriceValue); holder.tvWeeklyPriceValue = (TextView) convertView.findViewById(R.id.tvWeeklyPriceValue); holder.tvWeekendPriceValue = (TextView) convertView.findViewById(R.id.tvWeekendPriceValue); holder.imgCar = (ImageView) convertView.findViewById(R.id.imgCar); holder.btnBookNow = (Button) convertView.findViewById(R.id.btnBookNow); holder.btnBookNow.setFocusable(false); holder.btnBookNow.setFocusableInTouchMode(false); holder.btnBookNow.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(context , BookingFormActivity.class); intent.putExtra("car_name", car.getCarName()); intent.putExtra("min_age", car.getMinimumAge()); context.startActivity(intent); } }); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tvCarName.setText(car.getCarName()); holder.tvDailyPriceValue.setText(car.getDailyPrice()); holder.tvWeeklyPriceValue.setText(car.getWeeklyPrice()); holder.tvWeekendPriceValue.setText(car.getWeekendPrice()); imageLoader.displayImage(car.getThumbUrl(), holder.imgCar, animateFirstDisplayListener); return convertView; } static class ViewHolder { TextView tvCarName; TextView tvDailyPriceValue; TextView tvWeeklyPriceValue; TextView tvWeekendPriceValue; ImageView imgCar; Button btnBookNow; } } 
+7
source share
2 answers

You call init() twice, and the second overrides the caching options. Remove this line:

 imageLoader.init(ImageLoaderConfiguration.createDefault(context)); 
+5
source

Using the Lazy Listadapter is an easy and effective link below https://github.com/thest1/LazyList/blob/master/src/com/fedorvlasov/lazylist/LazyAdapter.java

+1
source

All Articles