2013-06-05 15 views
7

Utilizzo il caricatore di immagini universale per la visualizzazione di immagini di pollice nella visualizzazione elenco. Ho implementato i passaggi di base nell'adattatore e tutto funziona. Il problema è che se ho 10 elementi nell'elenco e posso vedere i primi 5 non appena scorrono verso il basso vengono visualizzate nuove immagini ma quando faccio scorrere indietro le immagini vengono sostituite nuovamente con una volta corretta, ciò che voglio sono le prime 5 immagini che sono mostrati all'inizio non dovrebbero essere sostituiti. In questo modo, quando si scorre su e giù, le immagini non vengono sostituite più e più volte.ListView come nell'app campione universale di caricatore di immagini

Come avviene nell'app di esempio uil ListActivity, le immagini caricate una volta non vengono sostituite quando si esegue il backup.

Ecco il codice

classe Application

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); 
} 
} 

adattatore

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; 
     } 




} 
+0

ti suggerisco di usare l'adattatore lista pigro – blganesh101

+0

Qualsiasi link sarebbe utile – Ravi

risposta

5

Si chiama init() due volte e la seconda chiamata ha la precedenza sulle opzioni di memorizzazione nella cache. Rimuovere questa linea:

imageLoader.init(ImageLoaderConfiguration.createDefault(context)); 
+0

genera un'eccezione: java.lang.IllegalStateException: ImageLoader deve essere init con la configurazione prima di utilizzare – Ravi

+0

Ciò significa che il tuo primo 'init()' nella classe dell'applicazione 'onCreate() 'non è essere chiamato. il tuo 'MyApplication.java' è definito come una classe di applicazione nel manifest? – Nachi

+0

Grazie amico non l'ho dichiarato nel manifest, il mio male .. – Ravi

1

Usa pigro Listadapter è facile ed efficiente link qui sotto https://github.com/thest1/LazyList/blob/master/src/com/fedorvlasov/lazylist/LazyAdapter.java

+0

ho visto il link che ho fatto provare, ma che avrebbe funzionato dal momento che pretende molto riciclare i punti di vista in modo non ci sarà questo problema, anche se non è efficiente in termini di memoria. Comunque grazie – Ravi

+0

questo esempio non ottiene l'immagine dal link. Perché dovrebbe accadere? Ho eseguito il debug in caso di errore nella cache di memoria – alicanbatur

Problemi correlati